温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

何为java不可变引用

发布时间:2026-09-11 07:46:09 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,“不可变引用”通常说的是引用本身不可变,而不是引用指向的对象不可变。这是和“不可变对象”容易混淆的概念。


1. 什么是引用(reference)

在 Java 中:

Person p = new Person("Tom");
  • p 是一个引用变量
  • new Person("Tom") 是一个对象
  • p 指向(引用)这个对象

2. 不可变引用是什么意思

不可变引用 = 引用变量一旦指向某个对象,就不能再指向别的对象

最常见的方式是使用 final

final Person p = new Person("Tom");

这时:

  • p 不能再指向别的对象
  • ❌ 下面这行会编译错误
p = new Person("Jerry"); // 编译错误

但是:

  • ✅ 对象本身的内容可以改(如果类允许)
p.setName("Jerry"); // 合法

3. 不可变引用 ≠ 不可变对象

这是关键区别:

不可变引用

final StringBuilder sb = new StringBuilder("hi");
sb.append("!"); // 可以,对象可变

不可变对象

final String s = "hello";
// s 不可变引用
// String 本身也是不可变对象

✅ 真正“安全不可变”通常是:final 引用 + 不可变对象


4. 方法参数中的不可变引用

void test(final Person p) {
    p = new Person(); // 编译错误
}
  • 参数 pfinal
  • 不能在方法内重新赋值
  • 但仍可修改对象内容

5. 为什么要用不可变引用

好处包括:

  • 代码更安全(不会被意外重新赋值)
  • 更容易理解(引用关系清晰)
  • 在并发编程中减少错误
  • 常用于:
    • 常量
    • 线程安全设计
    • 函数式编程风格

6. 一句话总结

Java 的不可变引用,是指用 final 修饰的引用变量,它只能指向一个对象,但不能再指向其他对象;对象本身是否可变,要看对象类型。

如果你愿意,我也可以对比讲:

  • final 变量
  • 不可变类(如 String
  • 线程安全中的不可变引用
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI