Java String比较问题

该文通过示例代码展示了Java中字符串比较的原理,涉及到堆与常量池中的对象引用。str1和str11指向常量池中的同一对象,str2和str22在堆中创建,但引用不同。str3和str33调用intern()后都指向了常量池的abc。比较结果揭示了对象引用和内容的差异。
摘要由CSDN通过智能技术生成

字符串比较问题,可以转换成堆地址和常量池地址去比较

String str1 = "abc";//const StringObj 0x1
String str11 = "abc";//const StringObj 0x1
String str2 = new String("abc");//StringObj 0x2 -> const StringObj 0x1
String str22 = new String("abc");//StringObj 0x3 -> const StringObj 0x1
String str3 = str2.intern();//const StringObj 0x1
String str33 = str2.intern();//const StringObj 0x1

System.out.println("str1==str2 : " + (str1 == str2));
System.out.println("str2==str3 : " + (str2 == str3));
System.out.println("str1==str3 : " + (str1 == str3));

System.out.println("str1==str11 : " + (str1 == str11));
System.out.println("str2==str22 : " + (str2 == str22));
System.out.println("str3==str33 : " + (str3 == str33));

System.out.println("str11==str22 : " + (str11 == str22));
System.out.println("str22==str33 : " + (str22 == str33));
System.out.println("str11==str33 : " + (str11 == str33));

运行结果:

str1==str2 : false
str2==str3 : false
str1==str3 : true
str1==str11 : true
str2==str22 : false
str3==str33 : true
str11==str22 : false
str22==str33 : false
str11==str33 : true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值