学会自动拆箱 自动装箱

一, 先了解一下 JDK1.5 的新特性:自动装箱和自动拆箱

这里我们先了解一下 JDK1.5 的新特性:自动装箱和自动拆箱

//自动装箱--自动将基本数据类型,变成对象,变量对应的包装类
//自动拆箱--自动将对象转成回基本数据类型

大家来看看这样定义k 对不对,猜对了有奖

  Integer k=100;																																																																											    //Integer是一个引用数据类型,又是一个对象
//100默认是一个基本数据类型
//我们相当于把基本数据类型赋值给一个对象
//   对象  = 基本数据类型

我们发现在JDK1.5之后写上面这行代码不会出错,原因就是java的底层帮我们自动调用了valueof方法,我们称这一步叫做自动装箱,
我们看看编译后上面这句话是什么样的

//Integer k=Integer.valueOf(100);
//我们在valueof源码中new 了一个Integer();

我们输出k System.out.println(k); 答案是100;原因是在Integer类中重写了tostring方法
在这里插入图片描述

二, 这里我们插入举个栗子说明自动拆箱自动装箱

在这里插入图片描述
输出
在这里插入图片描述

三, 言归正传(操作)

我们对k进行操作

 k+=100;//k=k+100
  System.out.println(k);

在这里我们是对Integer类型的k 进行操作,引用类型不能和基本类型做运算,但是输出k=200
在这里插入图片描述

原因是在这一步我们的K被还原回了基本类型(自动拆箱),但是K+100以后就变成基本数据类型了,所以K+100完了以后还要装箱回去
他的内部实现,这一步既有拆箱又有装箱

Integer k=100;//自动装箱机制
k+=100; //k=k+100,K先变基本类型,
		//再做加法等于200
		//再把基本数据类型200自动装箱变成Integer对象赋值给k
System.out.println(k);
//上面三行代码相当于进行了下面三行的操作
Integer k=Integer.valueOf(100);
k=Integer.valueOf(k.intValue()+100);
System.out.println(k);

四, bug要来了! 细节细节细节!看下面

众所周知,只有我不知,引用数据类型都有一个公共值叫NUll
所以我们进行这一步

 Integer kk=null;
   kk+=100;
 System.out.println(kk);

控制台出现空指针异常
在这里插入图片描述
原因是 NUll可以赋值给引用数据类型,不可以转成基本数据类型
所以这里我们需要进行 if 判断

   Integer kk=null;
   if (kk!=null){
    kk+=100;
    System.out.println(kk);
        }

另附上全文代码

public class Main {
    public static void main(String[] args) {

        Integer k=100;
        //Integer是一个引用数据类型,又是一个对象
        //100默认是一个基本数据类型
        //我们相当于把基本数据类型赋值给一个对象
        //   对象  = 基本数据类型
        /*Integer i=Integer.valueOf(10);*/
       // System.out.println(k);
        k+=100;//k=k+100
        System.out.println(k);
       /* Integer k=Integer.valueOf(100);
        k=Integer.valueOf(k.intValue()+100);
        System.out.println(k);*/
        Integer kk=null;
        if (kk!=null){
            kk+=100;
            System.out.println(kk);
        }
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值