首页 > 解决方案 > 自动装箱和拆箱适用于哪些运营商?

问题描述

我在本文档中看到 Autoboxing 和 Unboxing 适用于=operator,而 Unboxing 适用于%operator 和+=operator。

但是 Autoboxing 和 Unboxing 还适用于哪些其他运算符?

标签: java

解决方案


如果您有一个导致原始类型的表达式但您在预期其包装类的地方使用它,则会发生自动装箱,如下所示:

Integer i=1+2;//int is boxed to Integer

类似地,如果您有一个导致包装器类的表达式,但需要一个相应的原始表达式,则会发生自动拆箱,如下所示:

Integer boxed=Integer.valueOf("1337");//some boxed integer
int unboxed=boxed;//automated unboxing

赋值和方法调用都可能导致隐式装箱和拆箱。

由于有些操作符支持原始类型但不支持包装类,因此如果与这些操作符一起使用,编译器将隐式地拆箱原始原始类型。这些运算符都是算术运算符、布尔运算符和比较运算符(+, -, *, /, %, >>, <<, >>>, ^, &, &&, !, ~, |, ||, >, <, >=, <=, ++, --, ?

使用将左侧变量分配给计算结果的运算符(+=等)可能导致隐式拆箱(用于计算)和拆箱(用于分配)

除此之外,如果一个操作数是原始表达式而另一个操作数是产生相应包装类的值的表达式,则==(and ) 运算符可以导致自动拆箱。!=


推荐阅读