今天遇到一个很让我奇怪的问题
我建了一个List数组,然后给数组进行foreach循环,但是我后来在用到List时候,却报空指针,让我很困惑,如下:
List<Character>[] strs = new List[10];
for (List<Character> str : strs) {
str = new ArrayList<>();
}
反编译代码后,困惑解开
List<Character>[] strs = new List[10];
List[] var3 = strs;
int var4 = strs.length;
for(int var5 = 0; var5 < var4; ++var5) {
List var10000 = var3[var5];
new ArrayList();
}
原来进行foreach循环时候,会建立一个对象来=对象,然后再进行赋值操作,而原来的数组内的值,却没变化
有做了几个例子,方便理解
Integer[] ints = new Integer[10];
for (Integer anInt : ints) {
anInt = 10;
}
System.out.println(Arrays.toString(ints));
List<Integer> intList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
intList.add(0);
}
for (Integer intV : intList) {
intV = 10;
}
System.out.println(intList);
List<String> strList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
strList.add("0");
}
for (String strV : strList) {
strV = "abc";
}
System.out.println(strList);
反编译后
Integer[] ints = new Integer[10];
Integer[] var2 = ints;
int i = ints.length;
int i;
for(i = 0; i < i; ++i) {
Integer var10000 = var2[i];
Integer var5 = 10;
}
System.out.println(Arrays.toString(ints));
List<Integer> intList = new ArrayList();
for(i = 0; i < 10; ++i) {
intList.add(0);
}
Integer intV;
for(Iterator var7 = intList.iterator(); var7.hasNext(); intV = 10) {
intV = (Integer)var7.next();
}
System.out.println(intList);
List<String> strList = new ArrayList();
for(i = 0; i < 10; ++i) {
strList.add("0");
}
String strV;
for(Iterator var11 = strList.iterator(); var11.hasNext(); strV = "abc") {
strV = (String)var11.next();
}
System.out.println(strList);