黑马程序员技术交流社区

标题: euals问题 [打印本页]

作者: 马浩    时间: 2012-5-1 14:24
标题: euals问题
class Demo
{
        int num=100;
}

class Demo1
{
        public static void main(String[]args)
        {
                Demo D1=new Demo( );
                Demo D2=new Demo( );
               
                System.out.println(D1.num+"   "+D2.num);
                        System.out.println(D1.equals(D2));//为什么结果是false啊
        }
}
作者: 刘基军    时间: 2012-5-1 14:46
Demo类没有重写equals()方法,而是继承Object类的equals()方法,其内部是使用的"=="比较,比的是地址,所以为false.
作者: 黄业凌    时间: 2012-5-1 14:59
本帖最后由 黄业凌 于 2012-5-1 15:00 编辑

当然是false了
class Demo
{
        int num=100;
}

class Demo1
{
        public static void main(String[]args)
        {
                Demo D1=new Demo( );//new 在堆内存中开辟一块 D1的空间
                Demo D2=new Demo( );//new 在堆内存中开辟一块 D2的空间
               
                System.out.println(D1.num+"   "+D2.num);
                        System.out.println(D1.equals(D2));//为什么结果是false啊
                        //比较两块空间是不是同一引用 使用 "=="
                        //equlas()方法是比较序列是否相同

        }
}
作者: 于潇    时间: 2012-5-1 15:32
首先,你的代码编译是不通过的。
其次,D1和D2是两个不同的对象。
作者: 马浩    时间: 2012-5-1 16:24
于潇 发表于 2012-5-1 15:32
首先,你的代码编译是不通过的。
其次,D1和D2是两个不同的对象。

首先,编译是通过的,不然我也不会说是false啊。
其次,就因为不是相同的对象,所以才用equals啊
作者: 于潇    时间: 2012-5-1 16:43
马浩 发表于 2012-5-1 16:24
首先,编译是通过的,不然我也不会说是false啊。
其次,就因为不是相同的对象,所以才用equals啊 ...

那就是你在这里写错了。好好看看你的主函数哪里不对
作者: 何阳    时间: 2012-5-1 16:53
class Demo
{
        int num=100;
}
class Demo1
{
        public static void main(String[]args)
        {
                //此处表示创建了2个对象,在堆内存中开辟了2个对象并有2个地址值
                //将地址值复制个D1和D2.D1指向0x0046  ,D2指向0x0056
                Demo D1=new Demo( );
                Demo D2=new Demo( );
                System.out.println(D1.num+"   "+D2.num);
                System.out.println(D1.equals(D2));//为什么结果是false啊
          //因为此处比较的是对象的地址值,equals的方法是来自Object类的
         //在内存中的(D1指向0x0046  ,D2指向0x0056)你觉得地址值一样吗?,o了
     
   }
}




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