Java: equals 和 ==

24 篇文章 0 订阅

谈论 equals() 和 hashCode() 的文章太多了,而关于 equals() 和 == 之间的区别,能找到的文章很少。但是搞清楚这点非常重要。如果没搞清楚的话,很容易写出 BUG 而不自知。


二者的区别在于:

  • equals() 方法用于比较两个对象,比较它们的是否相等;
  • == 运算符用于比较两个变量,比较它们是否引用到同一个对象

我们在写 Java 代码的时候,看到的都是变量,而不是对象。对象是我们无法直接访问的,我们只能通过变量来操作对象。变量的值就是对象的引用,所以换句话说:equals() 用来比较两个对象的值,== 用来比较两个变量的值。


(例外情况:当变量被定义为基本型别时,它不会指向对象,它的值就是基本型别的值。这种情况本文不讨论。)


栽在这上面的初学者太多了。


典型的例子就是 String。为什么 String 不能用 == ?因为 String 是对象,只有当 String a 和 String b 指向同一个对象的时候,a == b 才会是 true;否则的话,即使两个 String 对象的值相同,a == b 也会是 false。


而且要注意,当 String a = "a";String b = "a"; 的时候,a 和 b 两个变量指向的就是同一个 String 对象 "a"。这是 Java 为了节省内存做的优化,但却让很多人误以为 String 对象可以用 == 来比较。其实这是错的。


所以,原则上,对象之间的比较都要用 equals() 方法,但有时候我们也可以用 == 来比较对象。例如枚举类,它只允许有那么几个对象,所以可以用 == 来比较。或者我们确实想要知道两个变量是不是指向同一个对象,这时候也应该用 ==。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值