Java包装类的自动装箱和自动拆箱

package packagetest.baozhuang;
/*
自动装箱  自动拆箱
 */
public class IntegerTest03 {
    public static void main(String[] args) {
        //JDK5.0之前的
        //int --> Integer(装箱)
        Integer i1 = new Integer(10);
        //Integer-->int(拆箱)
        int i2 = i1.intValue();

        //JDK5.0之后
        Integer i3 = 10;//自动装箱
        int i4 = i3;//自动拆箱
        System.out.println(i3);
        System.out.println(i4+1);

        m1(10);//自动装箱
        System.out.println(m2(10,5));//自动装箱
    }

    public static void m1(Object o){
        System.out.println(o);
    }

    public static int m2(Integer i1, Integer i2){
        return i1-i2; //自动拆箱
    }
}
  • 深入解析装箱和拆箱
package packagetest.baozhuang;
/*
深入自动装箱和自动拆箱
自动装箱和自动拆箱是编译过程的概念,和程序运行无关
主要目的是方便程序员编码
 */
public class IntegerTest04 {
    public static void main(String[] args) {
        Integer i1 = new Integer(10);
        Integer i2 = new Integer(10);
        //这里不会自动拆箱,比较的是地址
        System.out.println(i1==i2); //false
        //这里会自动拆箱
        System.out.println(i1 + 1);

        //比较两个Integer类型的数据是否相等不能用==
        //Integer已经重写了Object中的equals方法,并且比较的不是内存地址而是后面的数据
        System.out.println(i1.equals(i2));//true

        //重点
        Integer i3 = 128;
        Integer i4 = 128;

        //上面等同于
        //Integer i3 = new Integer(128);
        //Integer i4 = new Integer(128);
        System.out.println(i3 == i4);//false

        //注意以下程序
        //如果数据是在(-128 127)之间,Java引入了一个整形常量池(在方法区中,可以直接调用,就像字符串常量池
        Integer i5 = 127; //这个程序不会在堆中创建对象,会直接从整形常量池中拿。
        Integer i6 = 127;
        System.out.println(i5==i6); //true

        Integer i7 = -128;
        Integer i8 = -128;
        System.out.println(i7==i8); //true

        Integer i9 = -129;
        Integer i10 = -129;
        System.out.println(i9==i10); //false
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值