在 Java 里**“数组本身都是可变的”(长度是固定的,但内容可以改)。
如果你说的是“不可变数组 / 只读数组”**,常见有下面几种做法:
List.of(...)(Java 9+,推荐)得到的是不可变集合,不是数组,但最常用。
List<String> list = List.of("a", "b", "c");
// list.add("d"); // ❌ 报错
如果需要数组:
String[] arr = List.of("a", "b", "c").toArray(new String[0]);
⚠️ 注意:toArray 得到的数组仍然可以改内容
arr[0] = "x"; // ✅ 可以
Collections.unmodifiableList(Java 8 及以前)List<String> list =
Collections.unmodifiableList(Arrays.asList("a", "b", "c"));
// list.add("d"); // ❌ 报错
⚠️ 底层数组仍可改:
String[] arr = list.toArray(new String[0]);
arr[0] = "x"; // ✅ 可以
Java 没有原生不可变数组,需要自己封装:
public final class ImmutableArray {
private final int[] data;
public ImmutableArray(int[] src) {
this.data = Arrays.copyOf(src, src.length);
}
public int get(int i) {
return data[i];
}
public int length() {
return data.length;
}
}
使用:
ImmutableArray arr = new ImmutableArray(new int[]{1,2,3});
// arr.data[0] = 10; // ❌ 编译错误
ImmutableList<String> list =
ImmutableList.of("a", "b", "c");
String[] arr = ArrayUtils.toArray("a", "b", "c");
| 方式 | 是否真正不可变 | 说明 |
|---|---|---|
| 数组 | ❌ | Java 数组天生可变 |
| List.of | ✅(集合) | 推荐 |
| unmodifiableList | ✅(集合) | Java 8 |
| 自定义封装 | ✅ | 最安全 |
| Guava | ✅ | 最成熟 |
如果你能说下 Java 版本 / 使用场景(并发?配置?),我可以给你更合适的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。