黑马程序员技术交流社区

标题: 判断两个对象是否相等? [打印本页]

作者: 王德云    时间: 2011-11-8 23:36
标题: 判断两个对象是否相等?
判断两个对象是否相等,有哪些方法?
作者: 肖瑞军    时间: 2011-11-8 23:39
对象是否相等的规则

1 判断两个对象的hashCode是否相等; 如果不相等,认为两个对象也不相等, 完毕.

2 如果相等, 再调用equals方法.

判断相等,一是比地址,还有就是比内容,如果比地址直接==就好了,如果比内容就要重写了,因为object里的equals的实现很简单,就是用==比的
作者: 刘福双    时间: 2011-11-8 23:41
equals()    ==    hashcode()    我就知道这三个
作者: 咖啡    时间: 2011-11-8 23:42
==和equals
作者: 王德云    时间: 2011-11-8 23:43
刘福双 发表于 2011-11-8 23:41
equals()    ==    hashcode()    我就知道这三个

谢谢解答,不是吧,我要比的是两个对象。
作者: 七分饱    时间: 2011-11-8 23:53
hashcode();equals();compare()
作者: 胡文杰    时间: 2011-11-9 00:18
可以用equals()   == 比较     用hashcode()方法是获取对象地址的具体方法是Integer.toHexString(new 类().hashCode())或者Integer.toHexString(对象.hashCode())来获取对象的地址进行比较,也可以直接对象相比较,而对象相比较则是比较的具体的类和对象的地址
如下面代码 有一个First类
public void DoEquel(){
//                String address="abcdef";
                First s=new First();
                First c=s;
                First d=c;
//                System.out.println(Integer.toHexString(s.hashCode()));
//                System.out.println(s);
                if(Integer.toHexString(c.hashCode()).equals(Integer.toHexString(s.hashCode()))){
                        System.out.println("我爱你");//此代码比较的是对象的地址
                }
                                   if(d==s){
                        System.out.println("我爱你");//此代码比较的是类和对象的地址 d输出的是类名和对象地址
                        System.out.println(d);
                }if(d.equals(s))
                        System.out.println("我爱你");//此处对象的比较和==一样
                else
                        System.out.println("你犯错了");
               
        }
作者: 坚强    时间: 2011-11-9 07:39
胡文杰 发表于 2011-11-9 00:18
可以用equals()   == 比较     用hashcode()方法是获取对象地址的具体方法是Integer.toHexString(new 类( ...

你这样比较是很全面的,只是程序中的 s c d 都为空值,空地址,无法检测结果 ,应该初始化一次
String s=new String("abcdef");(我没有创建First类)
作者: 胡文杰    时间: 2011-11-9 07:58
本帖最后由 胡文杰 于 2011-11-9 08:01 编辑

First s=new First();
First c=s;
First d=c;

s  d   c  怎么会是空值呢?!    最后结果给你说是什么吧       text.First@0X00072   包名 .类名@对象地址
作者: 坚强    时间: 2011-11-9 22:19
胡文杰 发表于 2011-11-9 07:58
First s=new First();
First c=s;
First d=c;

额,但是你的First类是用来做什么的? 对于没有见到的人来说太透明了
作者: 王德云    时间: 2011-11-9 22:29
本帖最后由 wangdeyun 于 2011-11-9 22:32 编辑
坚强 发表于 2011-11-9 22:19
额,但是你的First类是用来做什么的? 对于没有见到的人来说太透明了


他这个也是可以的,不会是空值,引用数据类型的传递,将s的引用赋给c,再把c的引用付给d.表赤对象c是用s去实例化的.
此时相当于s c d都指向同一块堆内存
作者: 坚强    时间: 2011-11-9 22:58
wangdeyun 发表于 2011-11-9 22:29
他这个也是可以的,不会是空值,引用数据类型的传递,将s的引用赋给c,再把c的引用付给d.表赤对象c是用s去 ...

  哦 受教了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2