我一直在阅读 Java String 对象,我有这个问题 -
String x="a";
String y="b";
它会在 Java 中创建两个对象吗?
我一直在阅读 Java String 对象,我有这个问题 -
String x="a";
String y="b";
它会在 Java 中创建两个对象吗?
这两行代码不会创建任何对象。诸如字符串字面量之类"a"
的字符串被放入字符串池中,并在类加载时可用。
如果你这样做
String x = new String("a");
String y = new String("b");
将在运行时创建两个对象。
这些问题/答案应涵盖后续问题:
每当使用 new 运算符初始化 String 时,都会创建其新对象。就像你这样做
字符串 s1= 新字符串(“字符串”);
字符串 s2=新字符串(“字符串”);
字符串 s3=新字符串(“字符串”);
这三个都将在堆中创建一个单独的 String 对象。而如果上述所有字符串都在没有 new 运算符的情况下初始化,则首先将在字符串池中检查该字符串是否存在。如果需要的字符串存在,那么新的引用将开始指向现有的字符串。否则它将在池中创建新的字符串。例如:
字符串 s1=“字符串”;
字符串 s2="字符串";
字符串 s3="string1";
在上面的例子中,只会在字符串池中创建两个字符串(“string”和“string1”)。其中字符串 s1 和 s2 将引用单个对象“字符串”,而 s3 将引用另一个字符串对象“字符串 1”。
带有文字的字符串在字符串池中创建。而通过新运算符的字符串是在堆内存中创建的。
通过文字创建字符串的优点是,如果该字符串值已经在字符串池中可用,那么每次创建新对象新引用时,您都会通过 new 运算符获得相同的引用。
在您的情况下,您将获得相同的参考。所以只有反对。
字符串对象将由每一行创建,除非它们已经存在于字符串池中......如果它们存在于字符串池中,则只有一个引用将链接到您的变量,并且不会创建新对象。