不解equals()方法

aduan668 2008-04-20 02:22:39
int[] arr1 = {1,2,3};
int[] arr2 = {1,2,3};
Integer i = new Integer(3);
Integer j = new Integer(3);
System.out.println(arr1.equals(arr2)); //false ?
System.out.println(i.equals(j)); //true ?

为什么一个打印出来true;另一个打印出来false呢?
大侠指点下!
...全文
155 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lodanlen 2008-10-09
  • 打赏
  • 举报
回复
没想到这帖子居然也能让学习C#的我受用,呵呵,非常感谢!~
wuchao911 2008-04-21
  • 打赏
  • 举报
回复
地址和值要搞清楚。
fxbird 2008-04-21
  • 打赏
  • 举报
回复
数组里的元素是不会自动比较的。可能比较的是数组的内存地址。
wren4255 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq278095755 的回复:]
Object 的equals方法默认的是比较两个对象的地址
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
Intege 对Object里的equals方法进行了重写
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
所以Integer里的equals方法比较的是该对象里的int值.
而数组没有对Obje…
[/Quote]
burningice44 2008-04-21
  • 打赏
  • 举报
回复
1楼说的挺不错
chenxingyi 2008-04-21
  • 打赏
  • 举报
回复
两个对象之间互相equals,那么两个对象必须具备相同的hashcode...
薛定谔之死猫 2008-04-21
  • 打赏
  • 举报
回复
数组也是对象,不同的对象equals就不会返回true

Integer内部实现的equals只要整型value相同,它就返回true,就像String在字符串内容一致时就返回true一样,而不要求是同一对象
Zero2One 2008-04-21
  • 打赏
  • 举报
回复
Integer i = new Integer(126);
Integer j = new Integer(126);
楼主童鞋,再看看他们equals比较的结果
Little_Ghost 2008-04-21
  • 打赏
  • 举报
回复
1.
Object.Equal默认比较方式:比较引用
2.
值类型Override了Object.Equal,比较方式:比较值!


所以:
Array使用的是默认的Object.Equal,显然两个引用不相等,所以False
Interger是值类型,所以i和j的值显然相等,所以True
aking21alinjuju 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 anqini 的回复:]
第一:System.out.println(arr1.equals(arr2)); //false
首先你要明白array数object,数组里存放的是引用!因为它的equals比较的是对象的地址,不是比较其里面的内容,你要比较内容的话用这个比较Arrays.equals(arr1,arr2)

第二:因为Integer类重写了继承自Object的equals方法,Integer的equals方法如下!
比较i与j对象。当且仅当j不为 null,并且是一个与i对象包含相同 int 值的 Integer 对象时,结果为 true。
因…
[/Quote]
回答得很好
kuifont 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 anqini 的回复:]
第一:System.out.println(arr1.equals(arr2)); //false
首先你要明白array数object,数组里存放的是引用!因为它的equals比较的是对象的地址,不是比较其里面的内容,你要比较内容的话用这个比较Arrays.equals(arr1,arr2)

第二:因为Integer类重写了继承自Object的equals方法,Integer的equals方法如下!
比较i与j对象。当且仅当j不为 null,并且是一个与i对象包含相同 int 值的 Integer 对象时,结果为 true。
因…
[/Quote]

楼上的各位解释得不错...大概就是这样了.学习了^
cyj18 2008-04-20
  • 打赏
  • 举报
回复
因为是数据....EQUALS没有重写..还是从OBJECT那继承过来的
goodmrning 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingssq 的回复:]
1】这是因为数组对象没有重写equals方法,也就是使用了Object的equals方法,这个方法是这样定义的:如果x.equals(y),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true.
2】Integer类重写了equals方法,两个Integer对象x.equals(y),比较此对象x与指定对象y。当且仅当参数y不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。
[/Quote]
支持
tganthem 2008-04-20
  • 打赏
  • 举报
回复
学习了~~~
Evenque 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingssq 的回复:]
1】这是因为数组对象没有重写equals方法,也就是使用了Object的equals方法,这个方法是这样定义的:如果x.equals(y),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true.
2】Integer类重写了equals方法,两个Integer对象x.equals(y),比较此对象x与指定对象y。当且仅当参数y不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。
[/Quote]
gyl868 2008-04-20
  • 打赏
  • 举报
回复
受教了,支持一下
hl8189 2008-04-20
  • 打赏
  • 举报
回复
楼上正解!
qq278095755 2008-04-20
  • 打赏
  • 举报
回复
Object 的equals方法默认的是比较两个对象的地址
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
Intege 对Object里的equals方法进行了重写
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
所以Integer里的equals方法比较的是该对象里的int值.
而数组没有对Object对象里的方法重写,还是比较的是对象地址.

如果你自己重写equals方法,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
fuyou001 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 anqini 的回复:]
第一:System.out.println(arr1.equals(arr2)); //false
首先你要明白array数object,数组里存放的是引用!因为它的equals比较的是对象的地址,不是比较其里面的内容,你要比较内容的话用这个比较Arrays.equals(arr1,arr2)

第二:因为Integer类重写了继承自Object的equals方法,Integer的equals方法如下!
比较i与j对象。当且仅当j不为 null,并且是一个与i对象包含相同 int 值的 Integer 对象时,结果为 true。
因为对象…
[/Quote]
anqini 2008-04-20
  • 打赏
  • 举报
回复
第一:System.out.println(arr1.equals(arr2)); //false
首先你要明白array数object,数组里存放的是引用!因为它的equals比较的是对象的地址,不是比较其里面的内容,你要比较内容的话用这个比较Arrays.equals(arr1,arr2)

第二:因为Integer类重写了继承自Object的equals方法,Integer的equals方法如下!
比较i与j对象。当且仅当j不为 null,并且是一个与i对象包含相同 int 值的 Integer 对象时,结果为 true。
因为对象i和j拥有同样的int值3
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧