在 Java 中,== 运算符、equals() 方法和 hashCode() 方法是用于处理对象比较和哈希计算的重要概念。
== 运算符:
== 用于比较基本数据类型的值是否相等,以及比较引用类型的引用地址是否相同。
对于基本数据类型,== 比较的是它们的值是否相等。
int a = 5;
int b = 5;
System.out.println(a == b); // 输出 true,因为 a 和 b 的值相等
对于引用类型,== 比较的是对象的引用地址是否相同。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // 输出 false,因为 str1 和 str2 的引用地址不同
equals() 方法:
equals() 方法是用于比较对象的内容是否相等。
在 Object 类中,equals() 方法默认的行为是比较对象的引用地址(与 == 运算符相同)。
很多类(例如 String、Integer 等)重写了 equals() 方法,使其用于比较对象的内容是否相等。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); // 输出 true,因为 String 类重写了 equals 方法,比较的是内容是否相等
重写 equals() 方法的类通常会根据对象的属性或内容来判断是否相等。
hashCode() 方法:
hashCode() 方法返回对象的哈希码值(哈希码是将对象映射到某个整数的值),通常用于在散列数据结构中(如哈希表)进行快速查找。
如果两个对象根据 equals() 方法判断相等,那么它们的 hashCode() 应该返回相同的值,但反之不一定成立。
如果重写了 equals() 方法,通常也需要重写 hashCode() 方法,以保证满足相等的对象具有相同的哈希码。
总结:
== 比较的是变量的值或引用地址是否相等。
equals() 方法比较的是对象的内容是否相等,通常由类的设计者根据需要来确定相等的定义。
hashCode() 方法用于返回对象的哈希码值,通常在需要使用哈希表等散列数据结构时被调用,以便快速定位对象。