在 Java 中,immutable(不可变)指的是对象一旦创建,其状态(字段值)就不能再被修改。典型的例子有 String、Integer、LocalDateTime 等。
不可变对象天生是线程安全的:
final class Point {
final int x;
final int y;
Point(int x, int y) { this.x = x; this.y = y; }
}
多个线程同时读 Point 对象,不会出问题。
✅ 常用于:并发编程、函数式编程
不可变对象可以避免:
public List<String> getNames() {
return Collections.unmodifiableList(names);
}
如果不返回 immutable 集合,调用方可能误改内部数据。
不可变对象哈希值稳定,适合做 HashMap 的 key。
Map<String, String> map = new HashMap<>();
如果用可变对象做 key,修改后可能找不到原来的值。
Integer.valueOf(-128~127))String a = "abc";
String b = "abc"; // 可能复用同一对象
规则:
finalfinalpublic final class User {
private final String name;
private final List<String> roles;
public User(String name, List<String> roles) {
this.name = name;
this.roles = List.copyOf(roles); // 防御性拷贝
}
public List<String> getRoles() {
return roles; // 已经是不可变 List
}
}
StringInteger、LongBigDecimalLocalDate / LocalDateTimeList.of() / Set.of() / Map.of()Java 中 immutable 的作用是:用“不能改”来换“安全、简单、并发友好”。
如果你愿意,我也可以讲 mutable vs immutable 的实际案例对比 或 面试常问点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。