因为C相当于一个新的对象
第一个里边 c.intern() 引用找不到常量池 所以同样引用的C新生成的对象 所以是true
第二个里边 c.intern() 引用的是d中已经存在的常量池 但是c还是一个新对象 所以为false
图1无对应字符串的常量池,分配至内存;图2反之,以常量形式存储
【以下回答由 GPT 生成】
问题答案:
在String c = a + b
这行代码中,c
会指向一个新创建的对象。具体来说,当使用+
运算符连接两个字符串时,Java会创建一个新的String
对象,该对象的值为a
和b
的连接结果。
而在String c = a.concat(b)
这行代码中,c
也会指向一个新创建的对象。concat
方法是在String
类中定义的方法,用于将两个字符串连接起来,它会创建一个新的String
对象,该对象的值为a
和b
的连接结果。
两段代码中的c
对象都不会指向常量池中的字符串"abcde"。只有当通过字面量直接赋值的方式创建一个字符串时,才会将该字符串存储在常量池中。
以下为具体代码示例:
public class String1 {
public static void main(String[] args) {
String a = "abc";
String b = "def";
String c1 = a + b;
System.out.println("c1: " + c1); // 输出:c1: abcdef
String c2 = a.concat(b);
System.out.println("c2: " + c2); // 输出:c2: abcdef
System.out.println("c1 == c2: " + (c1 == c2)); // 输出:c1 == c2: false
}
}
运行结果显示c1
和c2
的值都为"abcdef",但它们指向的是不同的对象。因此,c
对象在这两种情况下都不指向常量池中的字符串。
【相关推荐】