为了账号安全,请及时绑定邮箱和手机立即绑定

关于java中的String对象的问题

关于java中的String对象的问题

PIPIONE 2019-01-17 00:56:03
为什么下面的程序打印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贡献2019条经验 获得超9个赞

s3是new 的,会产生对象,s3指向的是一个NEW的引用对象地址

查看完整回答
反对 回复 2019-03-01
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

明确一点,只要new关键字,就是新建一个对象,

内容相同的String对象 会使用同一个实例

这句话可以理解为这种情况下同一引用(如下代码),这使用了常量池技术,将字面值量提前准备好,然后当时用字面量赋值时,直接进行使用。

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);  // true
查看完整回答
反对 回复 2019-03-01
?
忽然笑

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才指向相同的内存区域。

查看完整回答
反对 回复 2019-03-01
  • 6 回答
  • 0 关注
  • 540 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信