“==” 与 “equals” 用法区别

本文详细解析了Java中String类型的“==”与“equals”方法的区别,以及StringBuffer使用equals方法的行为。通过实例说明了字符串常量池的特性及StringBuffer如何继承Object类的equals方法。

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

一、针对String 类型字符串来说:

       “==”:比较的是俩个字符串对象在内存中的首地址;

  “equals”:比较的是俩个字符串对象的内容(字面值);

eg:

String s1,s2,s3 = "abc", s4 ="abc" ;

s1 = new String("abc");

s2 = new String("abc");

那么:s1 == s2 (false)(由于比较的是俩个字符串对象的首地址,s1,s2都是新创建的对象,所以俩个地址不一样故,false);

而s1.equals(s2)  返回为true;

注意1:

      

对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符

常量所生成的变量,其中所存放的内存地址是相等的。

所以s3==s4是true(即使没有s3=s4这样一个赋值语句)


二、针对StringBuffer而言:

   

如果:          StringBuffer s1 = new StringBuffer("a");
                      StringBuffer s2 = new StringBuffer("a");
                      

结果:           s1.equals(s2)  //是false

解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
           

          而Object类中的equals方法是用来比较“地址”的,所以等于false.



面试总结:

   String类型而言:“==”比较的是字符串对象在内存中的首地址;而“equals”比较的是字符串的值(由于String类重写了equals方法);

  非字符串类型而言:“==”和“equals”比较的都是对象在内存中的首地址(非字符串未重写equals方法,使用的是object的equals所以比较的仍然是地址);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值