黑马程序员技术交流社区

标题: 这个问题,不懂 [打印本页]

作者: 丑小子799    时间: 2014-11-22 07:33
标题: 这个问题,不懂
int a = 127; Integer b = new Integer(127); System.out.println(a==b); System.out.pritnln(b.equals(a))为什么输出结果都是true。
作者: 海阔天空ZJ    时间: 2014-11-22 07:44
大哥你这代码感觉都不全啊
作者: sk0806    时间: 2014-11-22 07:46
毕老师视频中有讲;高薪中,张孝祥老师也有讲
叫做享元设计模式:-128到127之间,的数值较小,内存会缓存起来,封装为同一个对象,进行共享,即同一对象,所以结果为true
作者: zhouyunfang    时间: 2014-11-22 08:16
堆中的两个变量都是指向的同一个地址的
作者: 丑小子799    时间: 2014-11-22 09:22
好吧,我回头看看毕老师的视频去
作者: mmppp    时间: 2014-11-22 10:49
因为127是byte型的零界点,还没有在内存中开辟新的对象,所以这两个都是指向一个对象的。而==号就是以地址值判断的,所以为ture。而Integer类中重新定义了Object类中的equals方法,比较的就是两个数的值,都为127,所以也为true。
作者: Afridoce    时间: 2014-11-22 12:21
Integer 不是 int??
作者: wxnzb502    时间: 2014-11-23 10:55
因为是127 是byte,它是在方法区中的常量池里面的,所有地址值是一样的,无论比较的是地址值和是实际值都是true 如果是128 那么就不一样了,因为它要在堆内存中创建new 产生的地址值不一样
作者: 依米阳光    时间: 2014-11-24 16:50
共同学习:
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

作者: 哈达洋    时间: 2014-11-24 16:59
建议你去翻看一下Integer的源代码,这样不用别人解释,你自己就会非常明白这个事情的原理。




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