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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李哲 中级黑马   /  2012-3-17 17:40  /  2528 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李哲 于 2012-3-17 17:44 编辑

内存地址值一样?
指向同一个内容?
我有些糊涂了。
内存地址值就是哈希值吗?

6 个回复

正序浏览
张一凡 黑马帝 2012-3-17 18:21:09
7#
覆写equals()方法可以判断两个对象的值是否相等,与地址值无关。
而不覆写equals()方法就是判断两个对象的地址值是否相等。
而String类对象里面的equals()是它覆写了object对象里的equals()方法。
所以String类里用equals()判断对象是否相等,毕竟的是值是否相等。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
  比如:String str1=new String(“abc”); String str1=new String(“abc”); 这两句都是在内存的堆内存中建立了对象,虽然值一样,但是却是两个不同的对象。
“==”是用来判断,是否是同一个对象。也就是判断的是其两边在内存中的地址是不是一样,而Equals判断的是,其值是否相同。也就是对象的内容是否一样。
  System.out.println(str1==str2);其结果是false,而用System.out.println(str1.equals(str2));其结果就是true了。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
判断对象相等的比较严谨的做法就是重写自己类的hashcode和equals方法

对象是否相等的规则

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

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

判断相等,一是比地址,还有就是比内容,如果比地址直接==就好了,如果比内容就要重写了,因为object里的equals的实现很简单,就是用==比的
回复 使用道具 举报
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
对于比较自己创建的类的对象是否相等可以重写equals(Object obj)方法, 既然能重写那么就简单了我让他怎么相等就怎么相等极端的我可以写
equals(Object obj)
{
  return true;
}
我这个对象和任何对象比都相等 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
回复 使用道具 举报
这里我覆写了Object类中的equals方法 希望有助于你理解吧! equals比较两个对象时,比较的是内容,也就是默认的比较equals中默认的指定属性
public boolean equals(Object obj)
{
  if(this==obj) return true;
  if(!(obj instanceof Person)) return false;
  Person per=(Person)obj;
  if(per.name.equals(this.name) && (per.age==this.age)) return true;//此处调用的是String类中的比较方法,因为name是一个字符串
  else return false;
}

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
指向同一个内容
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马