A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德云 金牌黑马   /  2011-11-8 23:36  /  4151 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

判断两个对象是否相等,有哪些方法?

11 个回复

倒序浏览
对象是否相等的规则

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

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

判断相等,一是比地址,还有就是比内容,如果比地址直接==就好了,如果比内容就要重写了,因为object里的equals的实现很简单,就是用==比的

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 不错,可行。

查看全部评分

回复 使用道具 举报
equals()    ==    hashcode()    我就知道这三个
回复 使用道具 举报
==和equals
回复 使用道具 举报
刘福双 发表于 2011-11-8 23:41
equals()    ==    hashcode()    我就知道这三个

谢谢解答,不是吧,我要比的是两个对象。
回复 使用道具 举报
hashcode();equals();compare()
回复 使用道具 举报
可以用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:00
8#
胡文杰 发表于 2011-11-9 00:18
可以用equals()   == 比较     用hashcode()方法是获取对象地址的具体方法是Integer.toHexString(new 类( ...

你这样比较是很全面的,只是程序中的 s c d 都为空值,空地址,无法检测结果 ,应该初始化一次
String s=new String("abcdef");(我没有创建First类)

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 胡文杰 于 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:20
10#
胡文杰 发表于 2011-11-9 07:58
First s=new First();
First c=s;
First d=c;

额,但是你的First类是用来做什么的? 对于没有见到的人来说太透明了
回复 使用道具 举报
本帖最后由 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:02
12#
wangdeyun 发表于 2011-11-9 22:29
他这个也是可以的,不会是空值,引用数据类型的传递,将s的引用赋给c,再把c的引用付给d.表赤对象c是用s去 ...

  哦 受教了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马