Java for each 语法糖

提前

for each 语句遍历NullPointException异常问题分析。
for each 为Java语法糖,编译时会将解析消除for each语句,具体见代码实例。

源码

public static void main(String[] args) throws Exception {
       int[] arr = {1, 2, 3, 4};
       for (int i : arr) {
		System.out.println(i);
	}
       List list = Arrays.asList(1, 2, 3, 4);
	for (int i : list) {
		System.out.println(i);
	}
	Integer integer = 1;
	int i = integer + 1;
}

反编译

public static void main(String[] args) throws Exception {
    int[] arr = new int[]{1, 2, 3, 4};
    int[] var2 = arr;
    int var3 = arr.length;
    int i;
    for(i = 0; i < var3; ++i) {
        int i = var2[i];
        System.out.println(i);
    }

    List list = Arrays.asList(1, 2, 3, 4);
    Iterator var7 = list.iterator();
    while(var7.hasNext()) {
        i = (Integer)var7.next();
        System.out.println(i);
    }
}

总结

for each循环对象为数组时,解析为不同for循环,通过length属性控制循环条件,因此数组不能为null。
for each循环对象为Collection对象时,调用iterator()方法,迭代处理,因此Collection对象不能为null。

你可能感兴趣的:(java)