温馨提示×

温馨提示×

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

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

java不可变数组存在吗

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

Java 标准库(JDK)中,并不存在“不可变数组(immutable array)”这种原生类型或内置类

下面分层说明:


1. 原生数组本身是“可变的”

int[] a = {1, 2, 3};
a[0] = 10; // 合法,数组内容可改
  • Java 的 int[]String[]数组对象本身是可变的
  • 数组长度不可变,但元素可以改

结论

Java 原生数组 ≠ 不可变


2. 有没有“不可变数组”的替代方案?

✅ 方式一:List.of(...)(推荐,Java 9+)

List<Integer> list = List.of(1, 2, 3);
// list.set(0, 10); // 抛 UnsupportedOperationException
  • 返回的是 不可变 List
  • 不是数组,但是“不可变集合”

✅ 方式二:Collections.unmodifiableList

List<Integer> list = Collections.unmodifiableList(
    new ArrayList<>(Arrays.asList(1, 2, 3))
);

✅ 方式三:使用 Arrays.copyOf + 只读封装

int[] source = {1, 2, 3};
int[] copy = Arrays.copyOf(source, source.length);
  • 只是“防御性拷贝”
  • 原数组仍可改

✅ 方式四:第三方库

  • Guava
ImmutableList.of(1, 2, 3);
  • Eclipse Collections
  • Vavr

这些提供真正的不可变集合(不是数组)


3. 为什么 Java 不提供“不可变数组”?

  • 数组是 底层结构
  • 设计目标是性能和灵活性
  • 不可变由“集合框架”承担

4. 总结一句话

Java 没有“不可变数组”这个东西,但可以用不可变集合(List / ImmutableList)来代替。

如果你愿意,我可以:

  • 对比 List.of vs Arrays.asList
  • 讲“为什么数组不能 final 就不可变”
  • 给你一个“伪不可变数组”的最佳实践封装

你想看哪一个?

向AI问一下细节

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

AI