Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

基本类型的包装对象可变吗?

查看完整题解

参考回答

直接回答

Java 标准基本类型包装类的实例是不可变值对象。把 Integer 变量从 1 改为 2,改变的是变量持有的引用,不是把原来的 Integer 对象内部改成 2。不可变也不代表两个相同数值一定指向同一个对象,更不代表使用它们的复合操作自动线程安全。

讲清原理

不可变值便于安全共享,因此装箱和值工厂可以在规定范围内复用对象。但对象身份不是业务数值含义的一部分,不应依靠 == 判断包装数值是否相等,也不宜用包装值对象充当同步锁。

包装类没有暴露直接改写内部数值的普通 API。AtomicInteger 等可更新的数值工具属于不同类型,不能因为名称包含 Integer 就把它当成普通包装类。

例子与易错点

Integer first = 1;
Integer second = first;
first = first + 1;
System.out.println(first);  // 2
System.out.println(second); // 1

运算涉及拆箱、计算和重新装箱,second 保留原值。两个线程同时执行类似递增,仍可能产生竞态;需要原子计数时,应选择明确的原子工具或同步方案。比较可空包装值时,还要先处理 null。

相关题:第 24 题、第 26 题、第 34 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。