==运算符和equals方法的不同

91 阅读1分钟

==运算符和equals方法时判断数据是否相等的两种方式。 == 运算符作用于基本类型数据时,判断两个基本类型数据的值是都相等;作用于引用类型数据时,判断(数据的内存地址)引用是否相同。 equals方法是Object类中定义的方法,当类中没有重写equals方法时,判断数据的内存地址是否相同。当类中重写了equals方法,根据equals方法判断数据的内容是否相同。 对象变量引用对象,对象变量的值是对存储在堆中的某个对象的引用或者NULL,new操作符的返回值也是一个引用。 总结:== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较。

同时,重写equals方法遵循5个原则: 1、自反性:对于任意的引用值x,x.equals(x)一定为true。 2、对称性:对于任意的引用值x 和 y,当x.equals(y)返回true,y.equals(x)也一定返回true。 3、传递性:对于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定返回 true。 4、 一致性:对于任意的引用值x 和 y,如果用于equals比较的对象信息没有被修改,多次调用x.equals(y)要么一致地返回true,要么一致地返回false。 5、非空性:对于任意的非空引用值x,x.equals(null)一定返回false。