根据Class的javadoc
每个数组也属于一个类,该类作为一个类对象被所有具有相同元素类型和维度数的数组共享。
但是当我运行下面的
int[] intArray = { 1, 2 };
out.println(intArray.getClass().hashCode());
int[] int2Array = { 1, 2 };
out.println(int2Array.getClass().hashCode());
out.println(intArray.equals(int2Array));我得到下面的输出
1641745
1641745
false我想知道,尽管这两个数组都是int类型的,并且具有相同的维度,但等于为什么要返回false。
发布于 2011-12-12 19:26:03
这是因为您正在调用数组实例本身的equals(),而不是它们的Class对象。尝试:
out.println(intArray.getClass().equals(int2Array.getClass())); //prints true你也可以写:
out.println(int[].class.equals(int[].class)); //prints true thankfully顺便说一句,匹配的哈希代码不一定表示相等,尽管这在这里并不重要。
发布于 2011-12-12 19:26:43
尝试调用intArray.getClass().equals(int2Array.getClass())
发布于 2011-12-12 19:28:04
一般来说,Java哈希代码契约只要求:
在执行应用程序期间,每当在同一个对象上多次调用
(来自the Java documentation on Object#hashCode)
这里有两个不相等的整数数组(例如,a.equals(b) => false),但它们不是返回不等哈希码所必需的(参见第三点)。
另外,请注意,如果您使用Arrays.equals而不是Object#equals,代码将工作,如下所示。注意,Arrays.equals检查“两个数组包含相同数量的元素,两个数组中所有对应的元素对是相等的”。
int[] intArray = { 1, 2 };
out.println(intArray.getClass().hashCode());
int[] int2Array = { 1, 2 };
out.println(int2Array.getClass().hashCode());
out.println(Arrays.equals(intArray, int2Array));有关工作示例,请参见http://www.ideone.com/HaysD。
https://stackoverflow.com/questions/8479644
复制相似问题