On the contrary, everything that is implemented on foreach
can be implemented on for
. The fact is that for the object the interface should be implemented Iterable
, for example, how do you derive even numbers from 2 to 16?
for(int i = 2; i<=16; i+=2) System.out.println(i);
but through foreach
it is necessary to take a steam bath.
This fragment:
List<String> list = Arrays.asList("1", "2", "3"); for (String str : list) { System.out.println(str); }
Equivalent to writing through regular for
is this:
List<String> list = Arrays.asList("1", "2", "3"); for(int i = 0; i<list.size(); ++i){ System.out.println(list.get(i)); }
The @Bakuard answer is not quite correct, the compiler translates foreach
into this bytecode:
List<String> list = Arrays.asList("1", "2", "3"); Iterator var4 = list.iterator(); while(var4.hasNext()) { String str = (String)var4.next(); System.out.println(str); }