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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毅心缘 中级黑马   /  2014-6-16 22:29  /  1372 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毅心缘 于 2014-6-16 22:43 编辑
  1. public class ObjectDemo {

  2.         public static void main(String[] args) {
  3.                 Demo d1 = new Demo();
  4.                 Demo d2 = new Demo();
  5.                 Demo d3 = d1;

  6.                 System.out.println(d1.equals(d3));//true
  7.                 System.out.println(d1 == d2);//false
  8.                 System.out.println(d1 == d3);//true
  9.         }
  10. }

  11. class Demo {

  12. }
复制代码

d1和d2参数相同,为什么运行结果是false?

8 个回复

倒序浏览
d1和d2是两个不同的对象,==比较的是两个对象的地址,所以为false
回复 使用道具 举报
equals比较的两个变量的值,但是==比较的是两个对象的地址,他们是两个不同的对象,所以,他们不可能相同,他们参数虽然相同,值相同,地址不同,所以为flase
回复 使用道具 举报
d1 d2呢是类类型变量,而类类型变量存储的是引用,也就是地址,而d1和d2是用两个new出来的对象,自然引用是不一样的。而==比较的就是引用,如果你用equals的话就是true.
回复 使用道具 举报
GoodBoy123 发表于 2014-6-16 22:58
d1 d2呢是类类型变量,而类类型变量存储的是引用,也就是地址,而d1和d2是用两个new出来的对象,自然引用是 ...

System.out.println(d1.equals(d2));
也是false
回复 使用道具 举报
这里涉及到了equals和==的区别,==比较的是内存地址,而equals比较的堆中实际的存储内容。d1=d3 赋值实际上是把内存地址赋值过去,即让d3也指向d1的地址。而d1和d2分别创建了对象,内存地址肯定不同。希望能帮到你。
回复 使用道具 举报
从原理上去理解吧
回复 使用道具 举报
毅心缘 发表于 2014-6-16 23:01
System.out.println(d1.equals(d2));
也是false

好像这种自定义类类型元素你需要复写一下equals和hashCode
如果是String的话就有默认的比较方法。是比较提字符串的值。但是你这Demo的话试一下这样:
class Demo {
        private String name = "小明";
        private int age = 20;
       
        public boolean equals(Object obj)
        {
                if(!(obj instanceof Demo))
                        throw new RuntimeException();
                Demo d = (Demo)obj;
                return this.age == d.age && this.name.equals(d.name);
        }

}
回复 使用道具 举报
Aron 中级黑马 2014-6-17 19:49:59
9#
又遇到这个问题了 给你通俗的解释下
其实你的    System.out.println(d1.equals(d3));/1
                System.out.println(d1 == d2);/2
                System.out.println(d1 == d3);/3
这三个第一个和第三个的意思是一样的都是比较地址是否相同
你可能会问 equals 和==不是有区别的嘛 那么我告诉你 因为你没有重写object中的equals的方法,而object中equals的方法其实就是比较的两个地址和==没有区别
你明白了吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马