温馨提示×

温馨提示×

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

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

Java中哪些类是不可变的

发布时间:2025-06-08 00:49:25 来源:亿速云 阅读:111 作者:小樊 栏目:编程语言

在Java中,不可变类是指一旦创建了实例,其状态就不能被改变的类。这些类的对象在创建后,其属性值不能被修改,因此它们是线程安全的,可以在多线程环境中使用而无需额外的同步措施。以下是一些常见的不可变类:

1. String

  • String 类是不可变的,任何对 String 的操作都会返回一个新的 String 对象。

2. Integer, Long, Short, Byte, Float, Double

  • 这些包装类都是不可变的。例如,Integer 类有一个私有的 final int 字段 value,并且没有提供任何方法来修改这个字段的值。

3. Boolean

  • Boolean 类也是不可变的,它只有一个 truefalse 的值。

4. Character

  • Character 类表示单个字符,它是不可变的。

5. BigInteger 和 BigDecimal

  • 这两个类用于表示任意精度的整数和十进制数,它们都是不可变的。

6. LocalDate, LocalTime, LocalDateTime, LocalDate, YearMonth, Period, Duration

  • 这些日期和时间相关的类都是不可变的。

7. UUID

  • UUID 类表示一个不可变的通用唯一标识符。

8. Enum

  • 枚举类型在Java中是不可变的。每个枚举常量都是该枚举类型的一个实例,并且一旦创建就不能被修改。

9. StringBuffer 和 StringBuilder 的不可变版本

  • 虽然 StringBufferStringBuilder 本身是可变的,但它们的子类 String 是不可变的。如果你需要一个可变的字符串缓冲区,可以使用 StringBuilder,但要注意它不是线程安全的。

10. Collections.unmodifiableXXX

  • Java标准库提供了一些方法来创建不可变集合,例如 Collections.unmodifiableList, Collections.unmodifiableSet, Collections.unmodifiableMap 等。

自定义不可变类

你也可以创建自己的不可变类。以下是一个简单的例子:

public final class ImmutableClass {
    private final int value;

    public ImmutableClass(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

在这个例子中,ImmutableClass 是不可变的,因为它的字段 value 被声明为 final,并且没有提供任何方法来修改这个字段的值。

注意事项

  • 不可变类在多线程环境中非常有用,因为它们不需要额外的同步。
  • 创建不可变对象时,通常需要确保所有字段都是不可变的,并且在构造函数中初始化所有字段。
  • 不可变对象可以安全地共享,因为它们的状态不会改变。

通过使用不可变类,你可以编写出更安全、更简洁的代码。

向AI问一下细节

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

AI