黑马程序员技术交流社区

标题: 关于Object类中equals功能的问题 [打印本页]

作者: 唐巍    时间: 2012-3-5 02:29
标题: 关于Object类中equals功能的问题
请看下面代码:
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?
        }
}
作者: 吕猛    时间: 2012-3-5 09:11




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

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


呵呵,Sorry,标记写反了!




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