在 Java 中,**不可变对象(Immutable Object)**是指一旦创建后,其状态(字段值)就不能被修改的对象(如 String、Integer、LocalDate 等)。不可变对象有以下几个主要优势:
不可变对象天然是线程安全的:
synchronized✅ 示例:
final class Point {
private final int x;
private final int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
多个线程并发使用 Point 不会引发数据不一致。
不可变对象不会被意外修改:
✅ 示例问题(可变对象):
user.setName("Tom");
// 其他地方也持有 user 引用,被悄悄改了
不可变对象必须通过“创建新对象”来变更状态,逻辑更清晰。
不可变对象哈希值稳定,适合做 HashMap / HashSet 的键:
Map<String, String> map = new HashMap<>();
如果 Key 可变(如自定义类且字段可变),会导致“找不到值”的严重 Bug。
JVM 和类库可以安全缓存不可变对象:
Integer.valueOf(1) 使用缓存String 常量池复用不可变对象是函数式编程的基础:
返回不可变对象可防止外部修改内部状态:
public List<String> getList() {
return Collections.unmodifiableList(list);
}
StringInteger、Long 等)BigDecimalLocalDate / LocalDateTimeenum)Java 不可变对象的优势:线程安全、无副作用、易维护、适合缓存和并发编程。
如果你愿意,我也可以讲 如何设计一个不可变类 或 不可变对象的性能问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。