在 Java 中,“不可变引用”通常说的是引用本身不可变,而不是引用指向的对象不可变。这是和“不可变对象”容易混淆的概念。
在 Java 中:
Person p = new Person("Tom");
p 是一个引用变量new Person("Tom") 是一个对象p 指向(引用)这个对象不可变引用 = 引用变量一旦指向某个对象,就不能再指向别的对象
最常见的方式是使用 final:
final Person p = new Person("Tom");
这时:
p 不能再指向别的对象p = new Person("Jerry"); // 编译错误
但是:
p.setName("Jerry"); // 合法
这是关键区别:
final StringBuilder sb = new StringBuilder("hi");
sb.append("!"); // 可以,对象可变
final String s = "hello";
// s 不可变引用
// String 本身也是不可变对象
✅ 真正“安全不可变”通常是:final 引用 + 不可变对象
void test(final Person p) {
p = new Person(); // 编译错误
}
p 是 final好处包括:
Java 的不可变引用,是指用
final修饰的引用变量,它只能指向一个对象,但不能再指向其他对象;对象本身是否可变,要看对象类型。
如果你愿意,我也可以对比讲:
final 变量String)免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。