equals的用法:
1、equals方法不能作用于基本数据类型的变量
2、引用数据类型:默认情况下,比较的是地址值。
注意:该方法一般都会被重写,重写一般是自动生成的,重写之后用于比较成员变量的值是否相同;
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。
例如:String、Date等类对equals方法进行了重写,比较的是所指向的对象的内容。
==的用法:
1、用于基本数据类型:比较的是值是否相同。
2、用于引用数据类型:比较的是地址值是否相同。
java当中所有的类都是继承Object这个超类的,在Object类中定义了equals方法,其源码如下:
可以看到,这个方法的默认行为是比较对象的内存地址值,一般意义不大。所以,在一些类库当中将此方法进行了重写,如String、Integer、Date,不再是比较类在堆内存中的存放地址,而是比较对象的成员变量值是否相同。
所以说,对于复合数据类型之间进行equals比较,在没有重写equals方法的情况下,它们之间比较的还是在内存中的地址值,跟==的结果相同;如果被重写,则根据重写的方法。、
补充:当equals方法被重写时,通常也会将hashCode方法重写,以维护hashCode方法的常规规定,该协议声明相等的对象必须具有相等的哈希码。
原文:https://www.cnblogs.com/xbackjing/p/10822079.html