前些天春招看多许多面经关于==和equals方法的题目,浅谈一下想法,如有误,望更正!!
我们都知道==是运算符,对于基本数据类型,比较数据的具体值,对于引用数据类型,则比较对象的地址,而equals是超类object的一个方法,源码是
我们知道由于动态绑定机制的存在如果没有子类重写equals方法的情况下,实际上功能和==相同,判断地址是否相同,接下来我们分别从未重写的equals方法和重写了的方法展开讨论
1.未重写的Student类
2.另外我们了解到String是重写了equals方法的最佳案例
由此可知
(1)首先检查对象是否引用同一地址,如果是,他们肯定相等
(2) 接着(检查传入的对象是否是String类的实例)&&(判断字符串编码条件(java9以后的优化更新))&&(调用StringLatin1.equals()
方法比较两个字符串的值是否相等(旧版本利用指针移动判断,后来封装成该方法))三个条件均满足则return true,此处这样设置是为了防止将来传入的数据是类的实例化(对象),那二者的地址一定不同,要判断其内容是否相同,内容相同时同样true
因而大家在以后判断equals需要多多源码,具体分析