为什么下面的程序打印false?书上说java在内容相同的String对象 会使用同一个实例那为什么引用不相等?
public class test {
public static void main(String[] args) {
String s1="123";
String s2=s1;
String s3=new String("123");
System.out.println(s3==s2);
}
}
6 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
明确一点,只要new
关键字,就是新建一个对象,
内容相同的String对象 会使用同一个实例
这句话可以理解为这种情况下同一引用(如下代码),这使用了常量池技术,将字面值量提前准备好,然后当时用字面量赋值时,直接进行使用。
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true
忽然笑
TA贡献1806条经验 获得超5个赞
先说为什么应用不等。
String s1 = "123";// 是开辟内存,创建了新的对象,假设存放在内存中的a区域,变量s是对a内存的引用
String s2 = s1; // s2的引用也指向a内存
String s3 = new String("123");// 重新申请一段内存,假设存放在b区域
s3==s2 是判断两个变量是否指向同一块内存。很显然不是,所以打印false
“书上说java在内容相同的String对象 会使用同一个实例”是在String s1 = "123";String s2 = "123";的情况,s2和s1才指向相同的内存区域。
添加回答
举报
0/150
提交
取消