Java String对象创建

时间:2014-09-28 09:14:27

标签: java string object string-pool

我一直在阅读Java String对象,我有这个问题 -

String x="a";
String y="b";

它是否在Java中创建了两个对象?

4 个答案:

答案 0 :(得分:4)

这两行代码不会创建任何对象。字符串文字(例如"a")放在string pool中,并在加载类时可用。

如果你这样做

String x = new String("a");
String y = new String("b");

将在运行时创建两个 对象。

这些问题/答案应涵盖后续问题:

答案 1 :(得分:4)

当使用new运算符初始化String时,会创建新对象。 就像你做的那样

String s1 = new String(“string”);

String s2 = new String(“string”);

String s3 = new String(“string”);

所有这三个都将在堆中创建一个单独的String对象。 如果在没有new运算符的情况下初始化所有上述字符串,则首先在字符串池中检查字符串是否存在。如果存在必需的字符串,则新引用将开始指向现有字符串。否则,它将在池中创建新的sting。例如:

String s1 =“string”;

String s2 =“string”;

String s3 =“string1”;

在上面的示例中,只会在字符串池中创建两个字符串(“string”和“string1”)。其中String s1和s2将引用单个对象“string”,而s3将引用另一个字符串对象“string1”。

答案 2 :(得分:1)

带有文字的字符串在字符串池中创建。而通过新运算符的String在堆内存中创建。

通过文字创建String的好处是,如果String值已经在String Pool中可用,那么每次创建新对象的新引用时,您都可以通过new运算符获得相同的引用。

在您的情况下,您将获得相同的参考。所以只有对象。

答案 3 :(得分:0)

String对象将由每一行创建,除非它们已存在于字符串池中...如果它们存在于字符串池中,则只有引用将链接到您的变量,并且不会创建新对象。