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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐巍 黑马帝   /  2012-3-18 03:31  /  2211 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请看代码:
class IntegerDemo
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                Integer z=8;//Integer z=8与int z=8有什么区别?
                z=z*5;
                sop("z="+z);
                Integer m=128;
                Integer n=128;
                sop("m==n:"+(m==n));//打印结果:false  m和n数值相同,为什么比较结果为false?
                Integer a=127;
                Integer b=127;
                sop("a==b:"+(a==b));//结果:true   这里a和b比较结果为什么又为true呢?
        }
}

3 个回复

倒序浏览
本帖最后由 adison 于 2012-3-18 04:14 编辑

你所说的都是JDK1.5版本以后出现的新特性。
Integer z=8;相当于Integer z = new Integer(8);,这叫自动装箱
Integer z=8;(这是一个Integer对象,代表的int值是8)而int z=8;(是一个int类型的变量,值是8)
Integer m=128;
Integer n=128;
sop("m==n:"+(m==n));//m,n代表两个不同的Integer对象,内存地址不同
Integer a=127;
Integer b=127;
sop("a==b:"+(a==b));//a和b指向了同一个Integer对象,这是新特性,当数值在byte范围内时,对于新特性,如果该数值已经存在,则不会再开辟新的空间
                                               
回复 使用道具 举报
Integer z=8表示将8封装成一整数包装类对象,此时它可以作为元素存在于集合中并可以取出
而int z=8就是一简单赋值过程,表变量z记住8这个数值,它要想存在于集合中需借助数组,或者进行上述封装才能取出
再者声明Integer z,z可以为null,这当然不是int z所具有的。
Integer m=128;
Integer n=128;
若数值在byte(-128到127)范围内时,对于jdk1.5版本后出现新特性,如果该数值封装对象已经存在,则不会再开辟新的空间,而是引用指向同一封装对象
而128不满足新特性条件,就表示m,n分别是new出的两个对象,地址当然不一样,所以返回false
而数值127满足新特性a,b指向同一对象,所以返回true

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
public static void main(String[] args)
    {
            Integer z=8;//Integer z=8与int z=8有什么区别?
            z=z*5;
            sop("z="+z);
            Integer m=128;
            Integer n=128;
            sop("m==n:"+(m==n));
            //打印结果:false  m和n数值相同,为什么比较结果为false?
            //JDK1.5版本以后出现的新特性,当数值在byte范围内(-128到127)时,对于新特性,如果该数值已经存在,则不会再开辟新的空间,而且128超过了其范围所以每个引用对象都自己创建了一个引用地址所以比较会出现上面的结果
            //解决方法1 用对象比较方法equals
            sop("m==n   1:"+(m.equals(n)));
            //解决方法2 用这两个对象的具体值比较
            sop("m==n   2:"+(m.intValue()==n.intValue()));
            Integer a=127;
            Integer b=127;
            sop("a==b:"+(a==b));//结果:true   这里a和b比较结果为什么又为true呢?
    }

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马