关于java ==和equals的随笔

前些天春招看多许多面经关于==和equals方法的题目,浅谈一下想法,如有误,望更正!!

我们都知道==是运算符,对于基本数据类型,比较数据的具体值,对于引用数据类型,则比较对象的地址,而equals是超类object的一个方法,源码是

 

我们知道由于动态绑定机制的存在如果没有子类重写equals方法的情况下,实际上功能和==相同,判断地址是否相同,接下来我们分别从未重写的equals方法和重写了的方法展开讨论

1.未重写的Student类

2.另外我们了解到String是重写了equals方法的最佳案例

由此可知

(1)首先检查对象是否引用同一地址,如果是,他们肯定相等

(2) 接着(检查传入的对象是否是String类的实例)&&(判断字符串编码条件(java9以后的优化更新))&&(调用StringLatin1.equals()方法比较两个字符串的值是否相等(旧版本利用指针移动判断,后来封装成该方法))三个条件均满足则return true,此处这样设置是为了防止将来传入的数据是类的实例化(对象),那二者的地址一定不同,要判断其内容是否相同,内容相同时同样true

因而大家在以后判断equals需要多多源码,具体分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值