关于String类型变量的比较问题

String str1 = "abc";
String str2 = "abc";

上述中的"abc"会被存放到常量字符串池中,定义str1和str2指向了字符串池中的"abc"(这里有个原则:指向的字符串如果存在,就共享)

java中的串池有两个特点:

1、串池中的内容一经创建便不可改变,平时见到的串内容发生了改变那是假象,其实是丢弃了旧串,创建了新串;

2、当串池中的内容没有指针指向它的时候,它也不会被JVM的垃圾回收机制回收;

3、串池中的内容不允许重复。比如下面的例子:



String  str3 = new String("abc");

定义一个str3指向一个new String("abc")对象,JVM首先在字符串池中查找有没有"aaa"这个字符串对象,如果有,则不在池中再去创建"aaa"这个对象了,直接在堆中创建一个"aaa"字符串对象,然后将堆中的这个"aaa"对象的地址返回赋给引用str3,这样,str3就指向了堆中创建的这个"aaa"字符串对象;


使用 str1==str2 是true,这里比较的是堆内存地址,比较str1和==tr3就会返回false.

字符串内容的比较需要使用equals方法

str1.equals(str3)

这个结果返回的是true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值