Arrays.asList()返回的List不支持增删操作,需包装为ArrayList;基本类型数组会因泛型擦除导致类型错误;Arrays.sort()对基本类型用不稳定快排、对象数组用稳定TimSort;Arrays.equals()逐元素比较值,多维数组需deepEquals();Arrays.fill()对引用类型仅复制同一对象引用。
这个方法常被用来快速把数组变成 List,但返回的是 Arrays$ArrayList(不是 java.util.ArrayList),它底层封装了原数组,不支持 add()、remove() 等修改结构的操作,调用会抛 UnsupportedOperationException。
contains()
new ArrayList(Arrays.asList(arr))
int[])传入会变成 List,不是你想要的 List;得先手动装箱或改用 Integer[]
Arrays.sort() 对不同输入行为不同:对基本类型数组(int[]、double[])用双轴快排(不稳定),对对象数组(String[]、MyObj[])用 TimSort(稳定)。
null:对象数组含 null 且没自定义 Comparator,会抛 NullPointerException
Arrays.sort(strs, (a, b) -> b.length() - a.length())
Collections.reverse(),但注意:这不适用于基本类型数组数组变量是引用,== 比的是内存地址,两个内容相同但不同对象的数组,== 返回 false;而 Arrays.equals() 才真正逐元素比较值。
Arrays.deepEquals(),否则只比较子数组引用Arrays.equals(a, b) 会先判 null 和长度,安全;自己手写循环容易漏空指针equals(int[], int[])),也有泛型对象版本(equals(Object[], Object[])),别传错类型导致调用到错误重载Arrays.fill() 对基本类型数组直接赋值没问题,但对对象数组(如 String[] 或自定义类数组),它只是把**同一个引用**复制到每个位置。
new StringBuilder()),后续修改任一位置的元素,所有位置都会变for (int i = 0; i < arr.length; i++) {
arr
[i] = new MyObj();
}null 是安全的,因为 null 是字面量,没有共享问题Java 数组本身不可变长度,所有“操作”本质都是读、拷贝、替换或封装。工具类方法看似简单,但类型擦除、引用语义、排序稳定性这些点,稍不留意就会在运行时出问题。