2

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

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

它会在 Java 中创建两个对象吗?

4

4 回答 4

4

这两行代码不会创建任何对象。诸如字符串字面量之类"a"的字符串被放入字符串池中,并在类加载时可用。

如果你这样做

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

在运行时创建两个对象。

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

于 2014-09-28T09:15:23.613 回答
4

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

字符串 s1= 新字符串(“字符串”);

字符串 s2=新字符串(“字符串”);

字符串 s3=新字符串(“字符串”);

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

字符串 s1=“字符串”;

字符串 s2="字符串";

字符串 s3="string1";

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

于 2014-09-28T09:26:24.703 回答
1

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

通过文字创建字符串的优点是,如果该字符串值已经在字符串池中可用,那么每次创建新对象新引用时,您都会通过 new 运算符获得相同的引用。

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

于 2014-09-28T09:21:53.933 回答
0

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

于 2018-05-31T12:43:57.040 回答