Java的装箱和封箱
来源:互联网 发布:mac 涂层脱落 编辑:程序博客网 时间:2024/04/27 19:41
Java的自动装箱和封箱虽然看似比较简单,但有些需要注意的地方。
在赋值的时候,分两种情况。
1.将基本类型赋值给基本类型的代理类型。
如Integer i = 3;
这是一个自动装箱的过程。
需要对应的与之相符的类型被赋值过去。
但是,特殊情况:
当右边是int,而左边是比int数值范围更小的时候(如Short、Byte、Character),编译器会先尝试将int转化为对应的基本类型,再进行装箱。除此之外,类型不同,则不能装箱。
2.将代理类型赋值给对应的基本类型。
如int i = new Integer(3);
这时候,会将右边的对象自动拆箱,变成基本类型,在尝试去赋值。
注意,此时,如果左边的取值范围比较大的时候,也没有问题。
如double d = new Integer(4);//实际上先转化为int 4,再转化为double 4;
和double d = 4是同样的效果。
个人理解,装箱的过程比较严格。即便右边的数值范围比较小,类型不同也不能赋值。
如:Long l = 3;应该是 Long l = 3L;因此,他不能类型自动提升。
拆箱过程中,因为编译器首先已经将箱子拆开了, 已经变成基本类型了。再赋值就可以自动类型提升了。
在函数调用的时候(泛型类似):
编译器会自动间基本类型和其所对应的基本类型的代理类进行装箱封箱。类型不一致,是不可以滴。
注意了,如果Integer和int在函数的参数里还是不同滴,因此,func(int)和func(Integer)还是可以滴。
又注意了,在调用方法的过程中,如果一个低数值范围的数字基本类型被当作参数的时候,他寻找方法的顺序是这样的。
(1) 先找有没有和自身类型参数一致的方法。
(2) 类型提升,找有没有比自身数值范围大的方法。
(3) 进行装箱,找有没有装箱后符合条件的方法。
又又注意了,基本类型的代理类类型作为参数,顺序是这样的。
(1)编译器会首先找该类型的方法。
(2)对其进行拆箱,再找。
(3)进行类型提升,再找。
对于泛型来说是,类似的。但是泛型里只能声明类,不能声明基本类型。
总之,自动类型提升只是针对基本类型来说的。装箱之后,是不能进行类型提升的。
1 0
- Java的装箱和封箱
- java中的自动装箱封箱的一些细节性的问题
- java的封箱和拆箱
- 基本类型的封箱与装箱
- C# 封箱与装箱操作
- 封箱和拆箱
- 封箱和拆箱
- String和int拆箱和封箱的疑问
- Java中拆箱封箱,以及需要注意的陷阱
- Integer的自动封箱
- Java里的拆箱和装箱
- JavA的自动装箱和拆箱
- Java的自动拆箱和装箱
- java的自动装箱和拆箱
- Java的自动装箱和自动卸载
- java装箱和拆箱的记录
- C# 封箱和拆箱
- java---自动装箱和自动取消装箱
- 为什么ZMap用一个小时内就能扫遍整个互联网
- TIME_WAIT和CLOSE_WAIT状态区别
- iBase4J-JAVA分布式开源框架
- Office Enable异常,打开excel或者word时office卡死的情况
- Java 网络编程
- Java的装箱和封箱
- window下Solr的安装部署
- Nginx+tomcat+session共享
- java.lang.IllegalArgumentException: Service Intent must be explicit 异常说明
- HTTP错误码
- 基本HQL语句学习
- 开篇
- 数据可视化——Matplotlib模块入门(一)
- Android Animation Interpolator