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