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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丑小子799 中级黑马   /  2014-11-22 07:33  /  1299 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a = 127; Integer b = new Integer(127); System.out.println(a==b); System.out.pritnln(b.equals(a))为什么输出结果都是true。

9 个回复

正序浏览
建议你去翻看一下Integer的源代码,这样不用别人解释,你自己就会非常明白这个事情的原理。
回复 使用道具 举报
共同学习:
int a = 127; Integer b = new Integer(127); System.out.println(a==b);
如果比较地址的话,只有Integer b有引用地址,int a没有。
System.out.println(a==b); //这里实际上是:a == b.intValue() 所以会返回true

int a = 127; Integer b = new Integer(127); System.out.pritnln(b.equals(a))
使用integer的equeals方法时会比较的是里面的值
Integer重载了equals方法,实现如下:
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }  
System.out.println(a==b);System.out.pritnln(b.equals(a));比较的都是两个数值多以两个都返回true

如果是
Integer b=new Integer(127);
Integer a=new Integer(127);
System.out.println(a==b);
结果就是false
回复 使用道具 举报
因为是127 是byte,它是在方法区中的常量池里面的,所有地址值是一样的,无论比较的是地址值和是实际值都是true 如果是128 那么就不一样了,因为它要在堆内存中创建new 产生的地址值不一样
回复 使用道具 举报
Integer 不是 int??
回复 使用道具 举报
因为127是byte型的零界点,还没有在内存中开辟新的对象,所以这两个都是指向一个对象的。而==号就是以地址值判断的,所以为ture。而Integer类中重新定义了Object类中的equals方法,比较的就是两个数的值,都为127,所以也为true。
回复 使用道具 举报
好吧,我回头看看毕老师的视频去
回复 使用道具 举报
堆中的两个变量都是指向的同一个地址的
回复 使用道具 举报
毕老师视频中有讲;高薪中,张孝祥老师也有讲
叫做享元设计模式:-128到127之间,的数值较小,内存会缓存起来,封装为同一个对象,进行共享,即同一对象,所以结果为true
回复 使用道具 举报
大哥你这代码感觉都不全啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马