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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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两对象的内存不同,为什么结果是真呢?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

12 个回复

倒序浏览
你比较的是cat.age,这不是对象,是一个int值,cat1,cat2才是对象

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
你println(cat1.age)打印的是12。个人觉得返回的是int型的数值。。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
E:\java35天\论坛回帖.png
希望能帮到你,有不对之处请高人指点
回复 使用道具 举报
希望对你有用,不对之处请指教

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

论坛回帖.png

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
zhangchao 发表于 2014-1-25 00:17
希望对你有用,不对之处请指教

我觉得cat1.age和cat2.age是有值的吧。。我单独打印cat1.age输出的是12.
回复 使用道具 举报
楼主您好,
==比较两个对象时,比较的是两个对象在堆中的地址值是否相同,==在比较两个基本类型数值时比较的就是它们的值是否相等了。

说的不对的,再交流!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
wayne7sk 发表于 2014-1-25 10:37
我觉得cat1.age和cat2.age是有值的吧。。我单独打印cat1.age输出的是12.

sorry,是12,我没注意你在构造时初始化的
回复 使用道具 举报
cat1.age   age是int型的基本数据类型
基本数据类型比较的都是值,而不是地址
回复 使用道具 举报
回忆初中时候 来自手机 中级黑马 2014-1-25 23:53:50
10#
翼展哈哈 发表于 2014-1-25 11:21
楼主您好,
==比较两个对象时,比较的是两个对象在堆中的地址值是否相同,==在比较两个基本类型数值时比较 ...

谢谢了~~~(>_<)~~~
回复 使用道具 举报
回忆初中时候 来自手机 中级黑马 2014-1-25 23:57:32
11#
jiangyutc 发表于 2014-1-25 14:09
cat1.age   age是int型的基本数据类型
基本数据类型比较的都是值,而不是地址

谢谢了~~~^_^~~~
回复 使用道具 举报
看看同志们的讨论,思路的确清晰
回复 使用道具 举报
比较的是两个对象属性的具体值,与对象的内存地址无关。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马