解释:基本类型或对象引用
内部类复制的是变量的 值(如 int 的数值或对象的引用)。若允许修改原始变量,会导致副本与原始值不一致。
内部类复制的是数组的 引用值(地址)。只要引用不变(即 arr 始终指向同一个数组),数组内容的修改是允许的,因为所有副本的引用都指向同一内存区域。
一句话来说就是匿名内部类里变量会被复制一份,还会和原数组比对。而数组记录的是个地址,只要不修改这个地址,就不会产生影响。
//bug复现
public static void main(String[] args) {
int a = 0;
int[] arr = {0};
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
a = 1;
arr[0] = 1;
return 0;
}
});
}