💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
### 概述 在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基本数据类型。 比如: 基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的转换。相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。 ### 说明 * 自动拆箱:对象转成基本数值 . * 自动装箱:基本数值转成对象 . ## 注意 以后遇到基本类型和对应的包装类型进行计算呢的时候,完全按照基本类型进行计算就可以了.不需要关注什么时候装箱,什么时候拆箱. ### 演示 **装箱** ~~~ Integer i = 1; //实际等于 Integer i = new Integer(1); System.out.println(i); //结果是1,但它实际上是一个对象,这里的子类重写了toString()方法 ~~~ Integer是包装类型,而1是基本数据类型,按理由来说,应该是编译错误, 可是这里并没有编译错误. **拆箱** ~~~ Integer i = 1; System.out.println(i+1); //结果等于2 ~~~ 这里自动把i进行拆箱,从引用类型转换成基本类型,然后和1进行运算 . ### 优点 1. 代码看起来简洁 . 2. 方便进行运算 . ### 缺点 有可出现空指针异常 ~~~ Integer i = null; System.out.println(i+=1); //编译失败,所有引用类型都可以为null,并且默认值也都是null ~~~ 这里并没有装箱,因为等于null, null是不能调用方法的,所以进行拆箱的时候,就报错了 . ### 注意 正常情况下 ~~~ Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i == j); // false System.out.println(i.equals(j)); //true,类型与数值都相等 ~~~ 非正常情况下,数据在byte范围内的话,jvm虚拟机为什么节约内存,不会重新new对象 ~~~ Integer x = 127; //Integer x = new Integer(127) Integer y = 127; //Integer y = x System.out.println(x == y); //true System.out.println(x.equals(y)); //true ~~~