Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
属性值相同的不同对象在Java中是否具有相同的哈希代码_Java_Hashcode - Fatal编程技术网

属性值相同的不同对象在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

我是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
是否具有相同的哈希代码

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