在编程中,“对象不可变(immutable)”通常指对象在创建后,其状态(字段/属性)不能被修改。判断一个对象是否不可变,可从“定义层面”和“运行层面”两个维度来看。
final(Java 示例)public final class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
final 保证引用/值不能重新赋值final 防止子类破坏不变性setX()add()、clear() 等改变状态的方法// 错误示例
public List<String> getList() {
return this.list; // 外部可修改
}
// 正确示例
public List<String> getList() {
return Collections.unmodifiableList(this.list);
}
String、Integer、LocalDateDate、ArrayList(除非防御性拷贝)List<String> list = List.of("a");
list.add("b"); // UnsupportedOperationException
→ 不可变
obj.getX() == obj.getX() // 永远相同
String s = "a";
s = s.concat("b"); // 新对象
→ 原对象未变
| 语言 | 不可变示例 |
|---|---|
| Java | String, Integer, Record, List.of() |
| Python | tuple, str, frozenset |
| JS | Object.freeze() |
| Scala | case class(默认) |
看三件事:
- 能不能改(无 setter)
- 改了是不是新对象(返回新实例)
- 内部数据能不能被外部改(无引用泄露)
如果你指的是某一门语言或具体场景(如 Java / Python / 并发安全),我可以给出更针对性的判断方法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。