“不可变对象”(immutable object)是编程和计算机科学里一个很基础、也很容易混淆的概念。可以从定义、特征、为什么存在、怎么用、常见误区几个层面来理解。
不可变对象:一旦创建完成,它的状态(内部数据)就不能再被修改。
换句话说:
典型例子:
Stringint、str、tupleString s = "abc";
s = s + "d"; // 不是修改原字符串,而是生成了新的 "abcd"
这是一个常见误区。
String s = "a";
s = "b";
这里:
s 是变量(引用)"a" 和 "b" 是两个不可变对象变量 s 只是从指向 "a" 改成指向 "b",对象本身没变。
✅ 不可变说的是对象内容不可变
❌ 不是变量不能换指向
例如 Python:
t1 = (1, 2, 3)
t2 = t1 + (4,)
# t1 仍然是 (1, 2, 3)
# t2 是新的元组
多个线程同时读同一个不可变对象,不需要加锁。
状态不会“偷偷变”,程序行为更清晰。
如 Python 的 dict 键必须是不可变对象。
相同对象可以安全复用(如字符串池)。
不可变不是银弹:
例如:
StringBuilder sb = new StringBuilder();
Java 用 StringBuilder 来“绕开” String 的不可变代价。
要点:
finalprivate finalpublic 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; }
}
不可变对象不是“不能换变量”,而是“对象本身一旦存在,就不能被改变”。
如果你愿意,我也可以:
你可以告诉我你更想从哪个角度理解。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。