温馨提示×

温馨提示×

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

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

什么是java不可变类

发布时间:2026-10-01 17:28:25 来源:亿速云 阅读:84 作者:小樊 栏目:编程语言

Java 不可变类(Immutable Class) 是指:一旦对象被创建,其状态(成员变量的值)就不能再被修改的类。也就是说,对象在创建后,其字段不再发生变化。


一、不可变类的特点

  1. 对象创建后状态不可变
  2. 线程安全(无需加锁)
  3. 适合作为 HashMap / HashSet 的 key
  4. 便于缓存和复用

二、如何设计一个不可变类(标准写法)

在 Java 中,通常遵循以下规则:

1️⃣ 类用 final 修饰

防止被继承后修改行为

public final class Person {
}

2️⃣ 所有成员变量用 private final 修饰

private final String name;
private final int age;

3️⃣ 不提供 setter 方法

只允许通过构造方法赋值

4️⃣ 构造方法初始化所有字段

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

5️⃣ 提供 getter(只读)

public String getName() {
    return name;
}

6️⃣ 如果字段是引用类型,防止外部修改

例如 Date、List 等:

private final List<String> hobbies;

public Person(List<String> hobbies) {
    this.hobbies = new ArrayList<>(hobbies); // 防御性拷贝
}

public List<String> getHobbies() {
    return new ArrayList<>(hobbies); // 返回拷贝
}

三、完整示例

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

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

四、Java 中常见的不可变类

  • String
  • Integer、Long 等包装类
  • BigDecimal
  • LocalDate、LocalDateTime
  • UUID

五、不可变类的优缺点

✅ 优点

  • 线程安全
  • 易于调试
  • 可安全共享

❌ 缺点

  • 修改状态需要创建新对象(可能有性能开销)

六、面试常问

String 为什么设计成不可变?

原因包括:

  • 字符串常量池
  • 线程安全
  • 用作 HashMap key 稳定
  • 安全性(类加载、网络连接)

如果你愿意,我也可以帮你:

  • 对比 可变 vs 不可变
  • 讲 String 的不可变原理
  • 写 面试题版总结
向AI问一下细节

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

AI
助
手