我是Java新手,想知道朋友问这个问题背后的逻辑。
Say String pool为空且
程序员执行
String str = new String("Raj");
因为它而创建了多少个对象。
我的朋友说会创建3个对象,但不知道它背后的逻辑。
有人可以指导我如何创建3个对象。
答案 0 :(得分:5)
创建了两个String对象,一个是 String literal " Raj",另一个是new String(...)
创建的中间String对象。
可以说有另一个(第三个)对象,它是String文字内部的char[]
,您可能还想要计算它,它是一个对象 - 但不是String对象。 (新字符串将使用相同的char[]
,并且不会创建新字符串)
编辑:@jdphenix指出,每个创建的对象也是Object
的子类,因此包含它的实例,(你可以将它转换为Object并使用它)因此)。因此,从技术上讲,这里实际创建了3个以上的对象 - 但其中只有2个是String对象。
答案 1 :(得分:2)
实际上,会创建两个对象。
"Raj"
和
new String("Raj");
你的朋友要么不正确,要么...... 串联你。
对不起。
编辑:正确指出,会创建第三个对象,即char[]
内部的String
对象。
答案 2 :(得分:1)
将创建2个对象(字符串文字"Raj"
和String
对象:new String("Raj")
)
但只有一个String
将实习并放入String
的内部池(字符串文字)。
答案 3 :(得分:1)
现在我感到很困惑..我知道... ... intern()是在String池中创建字符串文字的方法。在这种情况下
String str = new String(“Raj”);
str.intern(); //这会将Raj放在字符串池中;或者我的理解是不正确的。每次创建一个String对象时,如果字符串池中已经没有字符串文字,那么它就会被创建。
答案 4 :(得分:0)
首先,当代码执行时,池已经被填充,所以你假设"字符串池将是空的"事实并非如此。
一个字符串对象将在池中用于字符串常量" Raj"。
构造将创建一个字符串对象。
总共只有2个对象,并且由于该代码被激发,只有1个对象被包装。