具有相同属性值的不同对象是否可以在 Java 中具有相同的哈希码
Can different objects with same value for the attributes have same hashcode in Java
我是 Java 的新手,我对 Java 个对象的哈希码有疑问:
public class HelloWorld
{
String name;
int age;
}
具有相同属性值的不同对象是否具有相同的哈希码?
HelloWorld hello1 = new HelloWorld();
hello1.name = "hello";
hello1.age = 20;
HelloWorld hello2 = new HelloWorld();
hello2.name = "hello";
hello2.age = 20;
hello1
和 hello2
会有相同的 hashCode 吗?
另外,具有不同属性值的对象是否可能具有相同的哈希码?
任何 class 都可以将 hashCode()
覆盖为 return 任何它想要的,所以是的。
如果您需要测试对象相等性,请使用 equals()
,对于对象标识,请使用 ==
。
两个相等的对象应该return 等于哈希值,但两个不相等的对象也可以return 等于哈希值。大多数表示数据的 classes 都需要重写这两种方法。
您没有重写 hashCode()
方法,因此 hashCode 本质上是随机的,因此对于两个不同的对象来说可能相同也可能不同,无论它们的字段值如何。不过得到相同hashCode的概率会很低
相等的对象意味着相等的哈希码。
相等的哈希码并不意味着相等的对象。
不相等的哈希码表示不相等的对象。
我是 Java 的新手,我对 Java 个对象的哈希码有疑问:
public class HelloWorld
{
String name;
int age;
}
具有相同属性值的不同对象是否具有相同的哈希码?
HelloWorld hello1 = new HelloWorld();
hello1.name = "hello";
hello1.age = 20;
HelloWorld hello2 = new HelloWorld();
hello2.name = "hello";
hello2.age = 20;
hello1
和 hello2
会有相同的 hashCode 吗?
另外,具有不同属性值的对象是否可能具有相同的哈希码?
任何 class 都可以将 hashCode()
覆盖为 return 任何它想要的,所以是的。
如果您需要测试对象相等性,请使用 equals()
,对于对象标识,请使用 ==
。
两个相等的对象应该return 等于哈希值,但两个不相等的对象也可以return 等于哈希值。大多数表示数据的 classes 都需要重写这两种方法。
您没有重写 hashCode()
方法,因此 hashCode 本质上是随机的,因此对于两个不同的对象来说可能相同也可能不同,无论它们的字段值如何。不过得到相同hashCode的概率会很低
相等的对象意味着相等的哈希码。
相等的哈希码并不意味着相等的对象。
不相等的哈希码表示不相等的对象。