情景:
想着用foreach循环的过程中改变数组的数值,结果发现改变不了。然后debug发现并没有进去什么方法,就去搜,结果提示可以查看class文件,在class文件中找到了答案。

数组

.java文件

  1. for (int anInt : ints) {
  2. anInt = 5;
  3. System.out.println(anInt);
  4. }
  5. System.out.println(Arrays.toString(ints));

.class文件

  1. int[] ints = new int[]{1, 2, 3};
  2. int[] var4 = ints;
  3. int var5 = ints.length;
  4. for(int var6 = 0; var6 < var5; ++var6) {
  5. int var10000 = var4[var6];
  6. int anInt = 5;
  7. System.out.println(anInt);
  8. }
  9. System.out.println(Arrays.toString(ints));

运行结果是:

5 5 5

[1, 2, 3]


集合

对于集合,foreach是使用了对应集合的迭代器

.java文件

  1. ArrayList list = new ArrayList();
  2. list.add(1);
  3. list.add(1);
  4. list.add(3);
  5. for (Object o : list) {
  6. System.out.println(o);
  7. }

.class文件

  1. ArrayList list = new ArrayList();
  2. list.add(1);
  3. list.add(1);
  4. list.add(3);
  5. Iterator var4 = list.iterator();
  6. while(var4.hasNext()) {
  7. Object o = var4.next();
  8. System.out.println(o);
  9. }

运行结果:

1

1

3