社区
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呢?
大侠指点下!
...全文
186
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)
hashCode与
equals
的
不解
之缘
本文深入探讨了hashCode和
equals
方法
在Java中的重要性及其工作原理。hashCode用于提高散列表查找效率,
equals
则用于自定义对象相等性的判断标准。文章通过实例讲解了这两个
方法
的正确实现方式。
对byte[]的
Equals
操作
不解
博客展示了一段Java代码,用于将编码后的密码与从数据库取出的密码进行比较。特别指出代码中第11行和12行的差异,使用第12行判断结果总是r=2,而用第11行判断可得到正确结果。
‘“==”和
equals
的区别
本文探讨了Java中'=='运算符和
equals
()
方法
在比较对象时的不同。'=='主要用于比较基本类型和判断引用是否指向同一对象,而
equals
()默认行为与'=='相同,但在重写后可以实现业务逻辑上的相等比较。举例说明了String类型的
equals
()在值相同时返回true,即使对象不同。文章强调了
equals
()
方法
在特定情况下的重写对于对象比较的重要性,并提到了toString()
方法
在打印对象时的作用。
equals
()、hashCode()、iterator()之解惑
本文解析了Java集合框架中三个核心
方法
:
equals
、hashCode和toString的实现原理,通过具体示例展示了如何正确重写这些
方法
以确保对象的正确比较。同时介绍了Iterator接口的基本用法。
Object中
Equals
和Reference
Equals
不解
之谜
本文详细解析了在C#中如何使用object.
Equals
和object.Reference
Equals
方法
来比较整型变量及自定义对象(如People类实例)的相等性。通过具体示例说明了值类型与引用类型在比较过程中的不同行为。
Java SE
62,622
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章