在 Java 中,不可变类(Immutable Class)是指对象一旦创建,其状态(字段值)就不能被修改的类(如 String、Integer、LocalDateTime 等)。
下面从什么时候该用、为什么用、不适合用的场景三个角度说明。
不可变对象天然线程安全:
✅ 适合:
public final class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
如果对象作为 HashMap 的 key 或 HashSet 的元素:
✅ 适合:
Map<UserId, UserInfo> cache;
表示一个值或概念,而不是“会变化的状态”:
✅ 适合:
不希望调用方修改你的内部状态:
public List<String> getList() {
return Collections.unmodifiableList(list);
}
或直接使用不可变类返回。
LocalDate next = today.plusDays(1);
public final class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() { return x; }
public int getY() { return y; }
}
关键点:
final classprivate final 字段❌ 状态频繁变化的大对象
❌ 性能敏感且创建成本高
❌ 需要大量中间状态修改(如游戏实体、ORM 实体)
例如:
Entity User {
age++; // 不适合不可变
}
当对象的“值”比“状态变化”更重要,且需要安全、稳定、可共享时,就用不可变类。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。