自动装箱与拆箱

Posted hellowen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动装箱与拆箱相关的知识,希望对你有一定的参考价值。

很多时候我们需要把基本数据类型转换为对象类型:

基本数据类型		对象类型
byte     		Byte
short     		Short
int     		Integer
long     		Long
float     		Float
double    		Double
char     		Character
boolean     	Boolean

我们把基本数据类型对应的对象类型称作这个基本数据类型的包装器(wrapper)。

基本数据类型转换为对应的对象类型的过程叫装箱,把包装器转换为基本数据类型类型的过程叫拆箱

注意:↓

Integer x=3;
        Integer y=3;
        System.out.println(x==y);//true
        System.out.println(x.equals(y));//true
        Integer a=128;
        Integer b=128;
        System.out.println(a==b);//false
        System.out.println(a.equals(b));//true
        Integer c=new Integer(3);
        System.out.println(x==c);//false
        System.out.println(x.equals(c));//true

包装器由于其不可变的属性,编译器优化会让他们去引用同一个对象。但是这个数要求在-128~127之间,超出这个范围缓存机制变化,造成不会引用同一个对象。 另外,如果直接new一个Integer,将不会引用同一个对象。这里面从Java9开始,new Integer(int)这个构造器将被废弃了,不建议使用。建议使用valueOf方法。而valueOf就会尽量使用缓存的对象。如果把c的赋值改为:Integer c=Integer.valueOf(3);则下面的x==c值为true。因此包装器的比较建议大家使用equals方法。

————————————————————————

由于包装器可以为null,如果把null拆箱,会抛出NullPointerException。

另外如果一个条件表达式中混合了Integer和Double类型,那么Integer会被拆箱提升为double,再装箱为Double。如:

Integer n=1;
Double x=2.0;
System.out.println(true?n:x);//1.0

以上是关于自动装箱与拆箱的主要内容,如果未能解决你的问题,请参考以下文章

Java 自动装箱与拆箱

了解Java的自动装箱与拆箱

自动装箱与拆箱

详解 Java 中的自动装箱与拆箱,5000+字,看了不懂你打我

自动装箱与拆箱

装箱与拆箱