如果我在Java中有一个完全空的字符串池并执行以下操作,那么字符串对象'Hello'是否会添加到字符串池中。
String myStr = new String('Hello');
我知道后续调用new String('Hello');将创建一个新的字符串对象,但不将其添加到池中,但如果池中还没有“Hello”,那么第一次该怎么办?
编辑:基本上,我需要知道为什么以下打印错误:
String myStr = new String("Hello");
print(myStr=="Hello");
首次调用时,如果是新字符串(“Hello”);将Hello添加到池中。然后在比较代码中,我们将池驻留对象'Hello'与文字'Hello'(==的右侧)进行比较。因此,==的左侧是否指向与右侧相同的对象(在池中)?
答案 0 :(得分:0)
答案 1 :(得分:0)
“Hello”将添加到String池中
String myStr = new String("Hello");
将被加载。 new String()将成为堆上的对象,其内部char数组将指向池中的char数组。它不是新的String(“Hello”),而是将“Hello”放入池中的类加载器
答案 2 :(得分:0)
是和否。如果你有文字"你好"在你的类的某个地方,当你的类被加载时(在代码运行之前),它将被添加到字符串池中。
但是你创建了一个String
的新实例,它不在字符串池中。
所以"Hello" != new String("Hello")
,"Hello" == new String("Hello").intern()
这意味着new String("Hello")
永远不会将此新实例添加到字符串池中,因为那里已经存在"Hello"
。
没有new String(String s)
不会将字符串添加到字符串池中;添加例如,为什么有用呢?用户输入字符串池?
答案 3 :(得分:0)
在Java' =='如果不与原始数据类型一起使用,则运算符用于检查对象的引用而不是它自身的对象的内容。因此在你的情况下 myStr和"你好"内存中有两个不同的对象,这就是它返回false的原因。另一方面,如果你想比较 对象的内容使用equals()方法,即
打印(myStr.equals("你好&#34));该陈述将返回true。