首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.Class与等式

java.lang.Class与等式
EN

Stack Overflow用户
提问于 2011-12-12 19:24:04
回答 6查看 2.4K关注 0票数 6

根据Class的javadoc

每个数组也属于一个类,该类作为一个类对象被所有具有相同元素类型和维度数的数组共享。

但是当我运行下面的

代码语言:javascript
复制
int[] intArray = { 1, 2 };
out.println(intArray.getClass().hashCode());
int[] int2Array = { 1, 2 };
out.println(int2Array.getClass().hashCode());

out.println(intArray.equals(int2Array));

我得到下面的输出

代码语言:javascript
复制
1641745
1641745
false

我想知道,尽管这两个数组都是int类型的,并且具有相同的维度,但等于为什么要返回false。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-12-12 19:26:03

这是因为您正在调用数组实例本身的equals(),而不是它们的Class对象。尝试:

代码语言:javascript
复制
out.println(intArray.getClass().equals(int2Array.getClass())); //prints true

你也可以写:

代码语言:javascript
复制
out.println(int[].class.equals(int[].class)); //prints true thankfully

顺便说一句,匹配的哈希代码不一定表示相等,尽管这在这里并不重要。

票数 8
EN

Stack Overflow用户

发布于 2011-12-12 19:26:43

尝试调用intArray.getClass().equals(int2Array.getClass())

票数 3
EN

Stack Overflow用户

发布于 2011-12-12 19:28:04

一般来说,Java哈希代码契约只要求:

在执行应用程序期间,每当在同一个对象上多次调用

  • 时,hashCode方法必须始终返回相同的整数,前提是不修改关于该对象的相等比较中使用的信息。从应用程序的一次执行到同一application.
  • If的另一次执行,这个整数不需要保持一致--根据equals(Object)方法,两个对象是相等的,然后对两个对象调用hashCode方法必须产生相同的整数结果。
  • 不要求如果两个对象根据等于(java.lang.Object)方法不相等,那么对两个对象调用hashCode方法必须产生不同的整数结果。但是,程序员应该意识到,为不平等的对象生成不同的整数结果可能会提高哈希表的性能。

(来自the Java documentation on Object#hashCode)

这里有两个不相等的整数数组(例如,a.equals(b) => false),但它们不是返回不等哈希码所必需的(参见第三点)。

另外,请注意,如果您使用Arrays.equals而不是Object#equals,代码将工作,如下所示。注意,Arrays.equals检查“两个数组包含相同数量的元素,两个数组中所有对应的元素对是相等的”。

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8479644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档