不可变类(Immutable Class)是指对象一旦创建,其状态(字段值)就不能再被修改。在 Java 中典型例子是 String、Integer、LocalDate 等。
下面从适用场景、优势、不适合的场景系统说明。
核心优势:天生线程安全
不可变对象:
synchronized、volatile✅ 非常适合:
public final class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
不可变对象是理想的 key
原因:
✅ 典型例子:
String 作为 Map keyMap<String, String> map = new HashMap<>();
map.put("key", "value");
❌ 如果用可变对象:
class User {
int id; // 可修改
}
修改 id 后,Map 直接“丢 key”。
不可变对象符合:
✅ 适合:
BigDecimal a = new BigDecimal("10");
BigDecimal b = a.add(new BigDecimal("5")); // 新对象
不可变对象:
✅ 示例:
public final class AppConfig {
public static final AppConfig DEFAULT = new AppConfig(8080);
private final int port;
}
当对象作为参数传递时:
✅ 尤其适合:
不可变对象:
✅ 适合:
例如:
❌ 每次修改都创建对象 → 性能差、GC 压力大
不可变对象 + 修改 = 新建对象
如果对象很大:
✅ 替代方案:
如果你必须频繁调用:
setXXX()那不可变类就不合适。
final 修饰private final不可变类适合:状态稳定、需要安全共享、作为 key、用于并发或函数式场景。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。