在 Java 中使用不可变对象(Immutable Object)主要有以下几方面的重要原因,既关乎安全性,也关乎性能与可维护性。
不可变对象是指:对象一旦创建,其状态(字段值)就不能被修改。
例如 String、Integer、LocalDateTime 都是不可变对象。
String s = "abc";
s = s + "d"; // 不是修改原对象,而是创建新对象
不可变对象天然线程安全:
// 多个线程同时读,不会出错
final User user = new User("Tom");
✅ 避免:
synchronized不可变对象可以防止:
public final class Config {
private final String url;
public Config(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
}
外部无法修改 url,系统更安全。
如果对象可变,作为 HashMap 的 key 会导致:
Map<Point, String> map = new HashMap<>();
Point p = new Point(1, 2);
map.put(p, "A");
p.setX(10); // 可变 → BUG
map.get(p); // null
✅ 用不可变对象(如 String、Integer)做 key 更安全。
不可变对象:
“如果对象不会改变,你就不必追踪它的变化。”
Java 8+ 大量使用不可变思想:
StreamOptionalLocalDatelist.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
不修改原集合,而是生成新结果。
不可变对象可以被:
例如:
Integer.valueOf(1) 使用缓存String 常量池public final class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
要点:
finalfinal这时可用:
StringBuilder → String)Java 使用不可变对象,是为了更安全、更简单、更并发友好。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。