Java hashCode()比较返回true而equals()方法返回false的示例?

Java hashCode()比较返回true而equals()方法返回false的示例?,java,equals,hashcode,Java,Equals,Hashcode,我知道这是可能的,我只是不知道怎么做。从我可以看出,如果一个类重写HASCODE()和均衡()方法来考虑指定的数据成员,则实例化该类的引用将被赋予相同的哈希值,只要它们所持有的指定数据成员是相同的。我有一种感觉,这就是我错的地方,有人能给我举个例子,说明hashCode()比较返回true,而equals()方法在同一组引用上返回false吗?如果这是一个重复的问题,我提前表示歉意,我试图寻找一个类似的问题,但没有结果。String a=“FB”,b=“Ea”;System.out.printl

我知道这是可能的,我只是不知道怎么做。从我可以看出,如果一个类重写HASCODE()和均衡()方法来考虑指定的数据成员,则实例化该类的引用将被赋予相同的哈希值,只要它们所持有的指定数据成员是相同的。我有一种感觉,这就是我错的地方,有人能给我举个例子,说明hashCode()比较返回true,而equals()方法在同一组引用上返回false吗?如果这是一个重复的问题,我提前表示歉意,我试图寻找一个类似的问题,但没有结果。

String a=“FB”,b=“Ea”;System.out.println(a.hashCode()==b.hashCode());系统输出println(a等于(b))我链接到的重复问题包含字符串中的一些示例。但即使不知道它们是什么,您也可以从逻辑上推断字符串中一定存在冲突。毕竟,字符串的数量是无限的(一个“小”但无限的子集是{“a”、“aa”、“aaa”…}),但是哈希代码的数量是有限的(2^32),所以显然一定有一些重复。这个问题是针对字符串的吗?对于字符串,由于考虑了有限哈希码,这种冲突会产生,但我很难将其外推到整数。编辑:我想你要做的就是给一个整数一个大于2^32的值?虽然整数不能存储那么高的值,但可能其他非原语类型也可以存储整数,所以不会有任何冲突。JavaDocs指定了的行为,它只是返回int值——因此不会发生冲突是正确的。其他数字类型,如Long和Double,将发生冲突。hashCode契约没有指定任何给定类都必须存在冲突,只是可能存在冲突。同样,一个实验:一个值枚举只有一个实例,所以根据定义,它不会有任何冲突。“如果一个类重写HASCODE()和均衡器()方法来考虑指定的数据成员,则实例化该类的引用将被赋予相同的哈希值,只要它们所指定的数据成员是相同的”。是的,但不相干。这是比较具有相同哈希代码的相等对象的一个参数,但您询问了相反的方法。如果相等的对象具有相同的哈希代码,这并不意味着不相等的对象也不具有相同的哈希代码。
String a=“FB”,b=“Ea”;System.out.println(a.hashCode()==b.hashCode());系统输出println(a等于(b))我链接到的重复问题包含字符串中的一些示例。但即使不知道它们是什么,您也可以从逻辑上推断字符串中一定存在冲突。毕竟,字符串的数量是无限的(一个“小”但无限的子集是{“a”、“aa”、“aaa”…}),但是哈希代码的数量是有限的(2^32),所以显然一定有一些重复。这个问题是针对字符串的吗?对于字符串,由于考虑了有限哈希码,这种冲突会产生,但我很难将其外推到整数。编辑:我想你要做的就是给一个整数一个大于2^32的值?虽然整数不能存储那么高的值,但可能其他非原语类型也可以存储整数,所以不会有任何冲突。JavaDocs指定了的行为,它只是返回int值——因此不会发生冲突是正确的。其他数字类型,如Long和Double,将发生冲突。hashCode契约没有指定任何给定类都必须存在冲突,只是可能存在冲突。同样,一个实验:一个值枚举只有一个实例,所以根据定义,它不会有任何冲突。“如果一个类重写HASCODE()和均衡器()方法来考虑指定的数据成员,则实例化该类的引用将被赋予相同的哈希值,只要它们所指定的数据成员是相同的”。是的,但不相干。这是比较具有相同哈希代码的相等对象的一个参数,但您询问了相反的方法。如果相等的对象具有相同的哈希代码,这并不意味着不相等的对象也不具有相同的哈希代码。