黑马程序员技术交流社区

标题: 成员变量在不同对象中的地址问题,请看看。。。 [打印本页]

作者: 回忆初中时候    时间: 2014-1-24 20:51
标题: 成员变量在不同对象中的地址问题,请看看。。。
class Cat
{
      int age;
      public Cat(int age)
      {
             this.age=age;
      }
}
class CatDemo
{
       public static void main(String[] args)
       {
               Cat cat1 = new Cat(12);
               Cat cat2 = new Cat(12);
               System.out.println((cat1.age)==(cat2.age));    //true
        }
}
运行结果是true,==是通过地址进行比较
请问cat1和cat2两对象的内存不同,为什么结果是真呢?

作者: 山治0712    时间: 2014-1-24 22:12
你比较的是cat.age,这不是对象,是一个int值,cat1,cat2才是对象
作者: wayne7sk    时间: 2014-1-24 22:29
你println(cat1.age)打印的是12。个人觉得返回的是int型的数值。。
作者: zhangchao    时间: 2014-1-25 00:15
E:\java35天\论坛回帖.png
希望能帮到你,有不对之处请高人指点
作者: zhangchao    时间: 2014-1-25 00:17
希望对你有用,不对之处请指教

论坛回帖.png (99.23 KB, 下载次数: 9)

论坛回帖.png

作者: wayne7sk    时间: 2014-1-25 10:37
zhangchao 发表于 2014-1-25 00:17
希望对你有用,不对之处请指教

我觉得cat1.age和cat2.age是有值的吧。。我单独打印cat1.age输出的是12.
作者: 翼展哈哈    时间: 2014-1-25 11:21
楼主您好,
==比较两个对象时,比较的是两个对象在堆中的地址值是否相同,==在比较两个基本类型数值时比较的就是它们的值是否相等了。

说的不对的,再交流!
作者: zhangchao    时间: 2014-1-25 11:36
wayne7sk 发表于 2014-1-25 10:37
我觉得cat1.age和cat2.age是有值的吧。。我单独打印cat1.age输出的是12.

sorry,是12,我没注意你在构造时初始化的
作者: jiangyutc    时间: 2014-1-25 14:09
cat1.age   age是int型的基本数据类型
基本数据类型比较的都是值,而不是地址
作者: 回忆初中时候    时间: 2014-1-25 23:53
翼展哈哈 发表于 2014-1-25 11:21
楼主您好,
==比较两个对象时,比较的是两个对象在堆中的地址值是否相同,==在比较两个基本类型数值时比较 ...

谢谢了~~~(>_<)~~~
作者: 回忆初中时候    时间: 2014-1-25 23:57
jiangyutc 发表于 2014-1-25 14:09
cat1.age   age是int型的基本数据类型
基本数据类型比较的都是值,而不是地址

谢谢了~~~^_^~~~
作者: 花生壳    时间: 2014-1-26 10:18
看看同志们的讨论,思路的确清晰
作者: kakaxi117    时间: 2014-1-26 14:13
比较的是两个对象属性的具体值,与对象的内存地址无关。




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