温馨提示×

温馨提示×

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

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

什么是java不可变变量

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

在 Java 里,**“不可变变量”**这个说法通常有几种理解,最常见的是下面两种情况。我分别说明,并给出例子,避免混淆。


一、变量本身不可变(final 变量)

这是最常被叫做“不可变变量”的情况

含义

使用 final 修饰的变量:

  • 一旦赋值,不能再指向其他对象
  • 但对象内部的内容可能可变

示例

final int x = 10;
// x = 20; // 编译错误

final List<String> list = new ArrayList<>();
list.add("hello"); // 合法
// list = new ArrayList<>(); // 编译错误

✅ 变量引用不可变
❌ 对象内容不一定不可变


二、不可变对象(Immutable Object)

这是更严格、更常见的“不可变”概念

含义

对象创建后:

  • 状态(字段值)不能被修改
  • 通常是:
    • 类用 final 修饰
    • 字段用 private final 修饰
    • 不提供 setter
    • 不暴露可变对象引用

示例

public final class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
Person p = new Person("Tom", 18);
// p.name = "Jerry"; // 不可修改

Java 中的典型不可变类:

  • String
  • IntegerLong 等包装类
  • LocalDateLocalDateTime

三、容易混淆的点

说法 含义
不可变变量 通常指 final 变量
不可变对象 对象状态不可变
不可变类 所有实例都不可变

四、为什么使用不可变?

✅ 线程安全
✅ 易于推理
✅ 可作为 Map 的 key
✅ 避免意外修改


如果你是指 final 变量String 为什么不可变,还是 如何设计一个不可变类,可以告诉我,我可以针对性讲。

向AI问一下细节

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

AI