在 Java 中,“不可变(Immutable)”通常指对象一旦创建,其状态(字段值)就不能被修改。典型例子有 String、Integer、LocalDateTime 等。
“不可变”之所以重要,主要有以下几方面原因:
不可变对象天然线程安全:
synchronized 或 volatileString s = "hello";
// 多个线程同时读 s,绝对安全
这大大降低了并发编程的复杂度。
可变对象容易被“悄悄改掉”,引发难以排查的 Bug:
void process(List<String> list) {
list.add("hacked"); // 调用方不知道被改了
}
如果使用不可变集合:
List<String> list = List.of("a", "b");
// list.add(...) 直接抛异常
HashMap 的 Key 如果可变,修改后会导致:
String 为什么适合做 Key?因为它不可变。
不可变对象可以安全缓存:
Integer.valueOf(-128~127) 缓存不可变对象:
Java 8+ 的 Stream / Optional / LocalDate 都依赖不可变:
LocalDate d = LocalDate.now();
LocalDate next = d.plusDays(1); // 返回新对象,不改原对象
返回不可变对象,防止外部破坏内部状态:
public List<String> getNames() {
return Collections.unmodifiableList(names);
}
不可变 = 安全 + 简单 + 高性能 + 易并发
在 Java 中,优先使用不可变对象,是写出健壮、可维护、并发安全代码的重要原则。
如果你愿意,我也可以讲:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。