据我了解
String s=new String(“abc”)
将创建两个对象-
"abc"
不在常量池中)虽然对于实际创建多少对象以及在何处创建对象,人们的理解并不多。
不管怎样,我有以下问题-
编辑
java docs forintern()
方法显然谈到了常量池,但在String(String)
中没有这样说。
字符串s=新字符串(“abc”)将创建两个对象:
没有。它在恒定池中。它是编译器放在那里的。
正确。
虽然对于实际创建多少对象以及在何处创建对象,人们的理解并不多。
许多误解:只有一个正确的理解。
为什么String类的java文档中没有涉及到将创建多少对象以及在哪里?
这个问题的前提是不正确的。它被覆盖了。不可能以“创建了多少字符串”的确切形式出现,但在过去20年中,这个问题被问了数百万次,答案并不完全是秘密。或者不应该。
如果String是不可变的,为什么在String类中提供新的String(String)?。
所以你可以创建一个新的。
还可以假设由String s=“abc”或String s=new String(“abc”)创建的所有字符串将在字符串常量池中可用吗?
没有。常量池中只有字符串文字和String.intern()
的结果。这也是有据可查的。
用于创建或附加在StringBuilder或StringBuffer中的String文字,它们是否也进入String常量池或仅保留在堆内存中。
编译器将所有字符串文本放入常量池中。
为什么String类的java文档中没有涉及到将创建多少对象以及在哪里?
它被一系列的文档所覆盖
String类表示字符串。Java程序中的所有字符串文本(如“abc”)都作为此类的实例实现。字符串是恒定的;它们的值在创建后无法更改。字符串缓冲区支持可变字符串。因为字符串对象是不可变的,所以它们可以共享。例如:
String str = "abc";
相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
来自Java语言规范
String对象具有常量(不变)值。
String文字(§3.10.5)是对String类实例的引用。
以及来自JSL#3.10.5。字串
此外,字符串文字总是引用类String的相同实例。这是因为字符串文字——或者更一般地说,常量表达式的值(§15.28)——被“驻留”,以便使用S方法共享唯一的实例tring.intern.
...
如果字符串是不可变的,为什么在String类中仍然提供新字符串?。还可以假设由String s=“abc”或String s=new String(“abc”)创建的所有字符串将在字符串常量池中可用吗?
由于String是对象,声明的有效方式是
String s = new String("abc");
但其中String s=“abc”
是出于其他原因设计的
Java的设计者决定在面向对象语言中保留原语类型,而不是将所有东西都变成对象,以提高语言的性能。
由于它是最有用的类出于性能原因,Java的String被设计成介于基元和类之间。
用于创建或附加在StringBuilder或StringBuffer中的String文字,它们是否也进入String常量池或仅保留在堆内存中。
考虑这个例子
StringBuilder sb = new StringBuilder("abc");
常量池中可用的文本
“abc”
,以及堆中创建的对象sb
。
给我一个机会阅读我的旧答案:如何使用“”初始化字符串?
本文向大家介绍不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?相关面试题,主要包含被问及不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?时的应答技巧和注意事项,需要的朋友参考一下 String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",然后我们将s指向"123",那么s所指向的那个对象是否发生了
问题内容: 我是学习Java的C ++人。我在读《有效的Java》,使我有些困惑。它说永远不要写这样的代码: 因为它创建了不必要的String对象。但是应该这样写: 到目前为止还可以…但是,考虑到此类: 为什么第一个陈述可以?不是吗 我如何使行为像这样,使上面的语句可以正常运行(带有和不带有)?字符串到底有什么用,它能够像这样传递文字就可以了吗?据我了解,Java中没有“复制构造函数”的概念吗?
问题内容: 字符串池是什么意思?以下声明之间有什么区别: JVM存储这两个字符串之间有什么区别吗? 问题答案: 字符串池是JVM对字符串实习概念的特定实现: 在计算机科学中,字符串保留是一种仅存储每个不同的字符串值的一个副本的方法,该值必须是不变的。内部字符串使某些字符串处理任务更加节省时间或空间,但代价是在创建或嵌入字符串时需要更多时间。不同的值存储在字符串内部存储池中。 基本上,字符串内部存储
对性能是否有影响? 不同Java版本的行为是否有差异?
当使用关键字 new 创建字符串时,它使用采用 String 文本的构造函数创建新的 String 对象。我想知道在调用 String 构造函数之前,文本是否存储在常量池中。 我这么问的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道: 她在第一行表示,new创建的String对象不会存储在常量池中。这很好,但不清楚的是,第一行构造函数中的字面“Summer”是
在这个问题之前,我先要说明一个事实,那就是我学习编程才一个月,而这个学校的作业却把我难住了。具体地说,它是摩尔斯电码到英语翻译器(反之亦然)...这是我被困住的部分: