属性值相同的不同对象在Java中是否具有相同的哈希代码
我是Java新手,我对Java对象的哈希代码有一个问题:属性值相同的不同对象在Java中是否具有相同的哈希代码,java,hashcode,Java,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"; hell
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
是否具有相同的哈希代码
HelloWorld hello1 = new HelloWorld();
hello1.name = "hello";
hello1.age = 20;
HelloWorld hello2 = new HelloWorld();
hello2.name = "hello";
hello2.age = 20;
还有,属性值不同的对象是否可能具有相同的哈希代码?任何类都可以重写以返回它想要的任何内容,所以是的
HelloWorld hello1 = new HelloWorld();
hello1.name = "hello";
hello1.age = 20;
HelloWorld hello2 = new HelloWorld();
hello2.name = "hello";
hello2.age = 20;
如果需要测试对象是否相等,请使用equals()
,对于对象标识,请使用=
两个相等的对象应该返回相等的哈希值,但两个不相等的对象也可以返回相等的哈希值。大多数表示数据的类都需要重写这两种方法。您尚未重写
hashCode()
方法,因此hashCode本质上是随机的,因此对于两个不同的对象,无论其字段值如何,都可能相同,也可能不同。但是,获得相同哈希代码的概率非常低。相等的对象意味着相等的哈希代码
相等的hashcode并不意味着相等的对象
非相等哈希代码表示非相等对象。是的,它们可以。是的,这是可能的。如何实现哈希代码以生成不同的结果?使用无冲突的。但是,这不是
Object::hashCode
方法的目标。它不应确保每个变量都有不同的值。它的主要目的是优化散列结构中的搜索,如HashSet
或HashMap
@ratzip。您不能-hashCode
返回int
,其值限制为40亿。但是您可以创建更多不同的对象:其中一些对象虽然没有相同的字段值,但具有相同的hashCode
。