You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Integer类为何不表现为引用类型?代码示例及疑问解析

Integer类为何不表现出预期的引用类型行为?

你提到的代码确实会产生不符合预期的结果,先看代码示例:

class Playground {
        public static void main(String[ ] args) {
            Integer i = 10;
            Integer num = i;
            i--;
            System.out.println("i = " + i);
            System.out.println("num = " + num);
        }
}

输出结果:

i = 9
num = 10

背后的核心原因:Integer是不可变类

Java中的Integer属于不可变类(Immutable Class),这类对象一旦被创建,内部的数值就无法被修改。当你执行i--操作时,实际发生了三个步骤:

  1. 自动拆箱:把i指向的Integer对象转换为基本类型int(值为10);
  2. 执行自减运算:将int值10减为9;
  3. 自动装箱:把新的int值9转换为一个全新的Integer对象,然后让i指向这个新对象。

整个过程中,原来那个值为10的Integer对象根本没有被修改,num依然指向它,所以最终输出的num值还是10。

具有相同行为的类

Java里还有不少不可变类,它们都会表现出类似的行为:

  • 所有基本类型的包装类:Long、Short、Byte、Character、Boolean、Float、Double;
  • String类:比如执行str += "test"时,实际是创建了新的String对象,原对象不会被修改;
  • 高精度计算类:BigInteger、BigDecimal,它们的所有运算操作都会返回新的对象,而非修改原对象。

内容的提问来源于stack exchange,提问作者Egor Khorozhansky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:45:27