JDK1.7后的字符串比较

本文详细解析了 Java 中 String 对象的比较方法,包括使用 == 和 equals 的区别,并探讨了 intern 方法的作用及其实现原理。通过三个具体示例说明了不同情况下字符串比较的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 、String a = "123";
       String b = "123";
       a == b;                  //true
       a.equals(b);         //true

2、String a = new String("123");
      String b = new String("123");
      a == b;                 //false
      a.equals(b);        //true

3、String a = new String("123").intern();
      String b = new String("123").intern();
      a == b;                 //true
      a.equals(b);         //true



造成上面三种不同结果的分析:

 例1:a创建的字符串常量放在了方法区的常量池中,在定义b的时候会先到常量池中查找是否存在该字符串常量。因为存在,所以b直接使用该字符串常量,因此a和b的内容相同,引用也相同。


例2:通过String构造方法创建的字符串会直接在堆中产生对应的String类型对象,然后a直接引用该对象。当定义b的时候又会在堆中创建新的对象。因此,尽管a和b的内容相同,但是引用了不同的对象,使得a != b。


例3:在调用String的intern方法的时候,会去常量池中看是否有与该对象内容相同的字符串(即equals为true)。若没有,则将该字符串放到常量池并返回常量池的字符串;若有,则直接返回常量池的字符串。(注意:JDK1.7之前结果不同)


因此下面判断结果:

"123" == new String("123").intern();     //true

"123" == "123".intern();      //true


String a = new String("123");

a == a.intern();      //false


     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值