在 Java 中,**“整数不可变”**通常指 Integer(以及 int 的包装类)是不可变类(immutable)。准确地说:
int 是基本类型,本身谈不上是“可变/不可变”,只是值类型;Integer 是对象,它被设计为不可变类,一旦创建,其值不能改变。下面从原因和设计角度解释。
Integer 不可变的意思是:
Integer a = 10;
a = 20; // 不是修改原对象,而是让 a 指向新的 Integer 对象
你无法修改一个已存在的 Integer 对象内部的值。
不可变对象:
Integer count = 0;
// 多线程读 count 是安全的
如果 Integer 可变,多线程修改同一个 Integer 就需要同步,代价很高。
Java 对 Integer 做了缓存:
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true
这依赖于:
Integer 值不可变如果可变,缓存就会导致严重 Bug。
Map<Integer, String> map = new HashMap<>();
如果 Integer 可变:
hashCode() 变化不可变才能保证:
hashCode 稳定不可变对象:
public final class Integer {
private final int value;
}
简化版 Integer 源码逻辑:
public final class Integer {
private final int value;
public Integer(int value) {
this.value = value;
}
public int intValue() {
return value;
}
}
关键点:
final class:不能被继承private final value:值不能改a = 20 是修改对象Integer a = 10;
a = 20;
✅ 实际是:
Integer(20)a 指向新对象int:值类型,复制值Integer:对象引用,值不可变Java 中
Integer不可变,是为了线程安全、缓存共享、集合安全和设计简洁。
如果你愿意,我也可以对比:
Integer vs AtomicIntegerString 也是不可变的免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。