Autoboxing 是指将基本类型(如int、double等)自动转换为相应的包装对象(如Integer、Double等)。Unboxing 是指将包装对象反转为基本类型的操作。
它在赋值、方法参数和集合中自动工作:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // autoboxing示例:5 (int) -> Integer(5) int value = numbers.get(0); // unboxing:Integer(5) -> 5
风险:
以下代码会抛出异常吗?为什么?
Integer x = null; int y = x;
答案: 该代码抛出NullPointerException,因为在执行int y = x;时,发生了从null到基本类型的unboxing,而null无法转换为int。
故事
int。故事
Integer用作缓存的键,未考虑到-128...127的值会被缓存,而其他值则不会。因此,==突然开始返回错误的结果,导致数据从缓存中错误地删除。故事
在REST API中收到可为null的值。简单的unboxing传入的Integer有时会因为意外的null而导致崩溃,而不是客户端发送的数字。