社区
Java SE
帖子详情
不解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
打赏
收藏
不解equals()方法
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呢? 大侠指点下!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
Java中==和
equals
的差别
java ==
equals
String
equals
方法
的一些疑问
public boolean
equals
(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) a
对byte[]的
Equals
操作
不解
if(s1.
Equals
(s2)) //................... 1 12 if (p1.
Equals
(p2)) //....................2 13 { 14 r = 0 ; 15 } 16 else 17 { 18 r = 2 ; 19 } 20 } ...
‘“==”和
equals
的区别
而
equals
方法
则是判断两个对象是否在意义上相等!!!????“意义?”什么鬼,难道是
方法
和变量都相同!!? 尝试了new了两个相同的对象,发现无论是用“==”还是
equals
都是false,突然恍然大悟,这就是两个不同...
Object中
Equals
和Reference
Equals
不解
之谜
privatevoidbutton3_Click(objectsender,EventArgse) { intnum1=100; intnum2=100; if(object.
Equals
(num1,num2)) { ...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章