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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐巍 黑马帝   /  2012-3-5 02:29  /  1605 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请看下面代码:
class Demo
{
}

class ObjectDemo2
{
        public static void main(String[] args)
        {
                Demo d1=new Demo();
                Demo d2=new Demo();
                System.out.println(d1.equals(d2));//打印结果:false   这时d1,d2对象比较的是什么?为什么结果为false?
                Demo d3=d1;
                System.out.println(d1.equals(d3));//打印结果:true    d3与d1比较为什么结果又为true?
        }
}

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览




因为d1和d3指向的是栈内存中同一个Demo对象,而d2指向的是另一个Demo对象。

而Object类中equals方法判断的就是,是否属于同一个对象。所以,d1和d3是一个对象,d1和d2不是同一个对象!
回复 使用道具 举报
对象的equals方法比较的是对象的内存地址,每new一次,都有一个新的地址,所以d1和d2是不一样的,而d3 = d1 是把d1指向对象的地址给了d3,他们指向了同一个对象,所以是一样的,楼上的图很清楚了 ,再把d1和d3连起来就更清楚了,然后堆和栈貌似画反了吧?
回复 使用道具 举报
杨毅 发表于 2012-3-5 09:58
对象的equals方法比较的是对象的内存地址,每new一次,都有一个新的地址,所以d1和d2是不一样的,而d3 = d1 ...


呵呵,Sorry,标记写反了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马