关于java:java-自动装箱与拆箱

40次阅读

共计 1350 个字符,预计需要花费 4 分钟才能阅读完成。

这个是 jdk1.5 当前才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆:

java 语言标准中说道:在许多状况下包装与解包装是由编译器自行实现的(在这种状况下包装成为装箱,解包装称为拆箱);

其实依照我本人的了解主动装箱就能够简略的了解为将根本数据类型封装为对象类型,来合乎 java 的面向对象;例如用 int 来举例:

// 申明一个 Integer 对象
Integer num = 10;
// 以上的申明就是用到了主动的装箱:解析为
Integer num = new Integer(10);

以上就是一个很好的体现,因为 10 是属于根本数据类型的,原则上它是不能间接赋值给一个对象 Integer 的,但 jdk1.5 后你就能够进行这样的申明,这就是主动装箱的魅力
主动将根本数据类型转化为对应的封装类型。成为一个对象当前就能够调用对象所申明的所有的办法

主动拆箱:故名思议就是将对象从新转化为根本数据类型:

// 装箱
Integer num = 10;
// 拆箱
int num1 = num;

主动拆箱有个很典型的用法就是在进行运算的时候:因为对象时不恩间接进行运算的,而是要转化为根本数据类型后能力进行加减乘除

Integer num = 10;
// 进行计算时隐含的有主动拆箱
System.out.print(num--);

哈哈 应该感觉很简略吧,上面我再来讲点略微难点的,是略微
看上面一个例子

// 在 -128~127 之外的数
         Integer num1 = 297;   Integer num2 = 297;           
         System.out.println("num1==num2:"+(num1==num2));                    
         // 在 -128~127 之内的数 
         Integer num3 = 97;   Integer num4 = 97;   
         System.out.println("num3==num4:"+(num3==num4)); 

打印的后果是:num1==num2: false num3==num4: true

很奇怪吧:这就归纳于 java 对于 Integer 与 int 的主动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)

为了加大对简略数字的重利用,java 定义:在主动装箱时对于值从–128 到 127 之间的值,它们被装箱为 Integer 对象后,会存在内存中被重用,始终只存在一个对象

而如果超过了从–128 到 127 之间的值,被装箱后的 Integer 对象并不会被重用,即相当于每次装箱时都新建一个 Integer 对象;明确了吧

以上的景象是因为应用了主动装箱所引起的,如果你没有应用主动装箱,而是跟个别类一样,用 new 来进行实例化,就会每次 new 就都一个新的对象;

这个的主动装箱拆箱不仅在根本数据类型中有利用,在 String 类中也有利用,比方咱们常常申明一个 String 对象时:

String str = "sl";
// 代替上面的申明形式
String str = new String("sl");


最新 2020 整顿收集的一些高频面试题(都整顿成文档),有很多干货,蕴含 mysql,netty,spring,线程,spring cloud、jvm、源码、算法等具体解说,也有具体的学习规划图,面试题整顿等,须要获取这些内容的敌人请加 Q 君样:909038429
/./* 欢送退出 java 交换 Q 君样:909038429 一起吹水聊天

正文完
 0