我开始接触Java的时候,总是分不清==和equals他们有什么区别,他们比较的是什么。看了圣思园张龙老师的视频学习,跟着他剖析源才慢慢明白。
我现在理解的 ==和equals:
==
比较的是两边的值,不管两边是原生数据类型还是引用数据类型,比较的是他们的值。
对原生数据类型而言,==比较的是他们所包含的值。
而对引用类型而言比较的是他们引用的对象的地址是否相同,如果地址相同则两边为同一个对象。
equals
equals比较的内容不一定,根据每个类对equals的实现而定(不知道这样说对不对,现在是这样认为的,通过两个例子来印证我的想法)。
equals方法源于object类,他处于所有对象继承体系最顶层,也就是说所有对象都有equals方法。
object对象对equals方法的实现是(参考原代码):
object底层是用 == 来实现equals方法,也就是说类在没有重写equals方法的前提下,equals方法和==功能相同。
String的equals方法是我们经常用到的方法,它的equals方法也有不同(参考原代码):
String的equals方法是先用 == 比较两个是否为同一个对象,如果是则返回true,不是还会进一步比较,比较两边的String对象的内容是否相等,如果相等则返回true,否则false。
总结: ==比较两边的值,equals比较看调用此方法的对象的实现而定。