java - 自动装箱和拆箱适用于哪些运营商?
问题描述
我在本文档中看到 Autoboxing 和 Unboxing 适用于=
operator,而 Unboxing 适用于%
operator 和+=
operator。
但是 Autoboxing 和 Unboxing 还适用于哪些其他运算符?
解决方案
如果您有一个导致原始类型的表达式但您在预期其包装类的地方使用它,则会发生自动装箱,如下所示:
Integer i=1+2;//int is boxed to Integer
类似地,如果您有一个导致包装器类的表达式,但需要一个相应的原始表达式,则会发生自动拆箱,如下所示:
Integer boxed=Integer.valueOf("1337");//some boxed integer
int unboxed=boxed;//automated unboxing
赋值和方法调用都可能导致隐式装箱和拆箱。
由于有些操作符支持原始类型但不支持包装类,因此如果与这些操作符一起使用,编译器将隐式地拆箱原始原始类型。这些运算符都是算术运算符、布尔运算符和比较运算符(+
, -
, *
, /
, %
, >>
, <<
, >>>
, ^
, &
, &&
, !
, ~
, |
, ||
, >
, <
, >=
, <=
, ++
, --
, ?
)
使用将左侧变量分配给计算结果的运算符(+=
等)可能导致隐式拆箱(用于计算)和拆箱(用于分配)
除此之外,如果一个操作数是原始表达式而另一个操作数是产生相应包装类的值的表达式,则==
(and ) 运算符可以导致自动拆箱。!=
推荐阅读
- php - Foreach 循环仅返回 laravel 中查询的最新结果
- algorithm - 如果我们从列表中删除一个值,如何调整 %
- c# - 使用组合框过滤数据网格视图中的数据
- java - 为什么使用 Optional 而不是 Objects.isNull 或 obj == null 会给我带来优势?
- c# - 无法在 SignalR 与 WPF 客户端之间建立连接
- linux - 如何使用 bash 脚本升级 rpm 包?
- node.js - 启动 Node 服务器并在 CICD 中运行测试
- javascript - 为什么 Safari 日期字段显示为无效日期?
- javascript - 检测零并转换它们?
- php - 无法在 Homestead 上运行 Laravel 迁移