一个简单的字符串查询让我困惑

时间:2014-08-28 07:40:48

标签: java

我是Java新手,想知道朋友问这个问题背后的逻辑。

Say String pool为空且

程序员执行

String str = new String("Raj");

因为它而创建了多少个对象。

我的朋友说会创建3个对象,但不知道它背后的逻辑。

有人可以指导我如何创建3个对象。

5 个答案:

答案 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个对象被包装。