Why final variable in for-each loop does not act final?

public class ForEachLoop { public static void main(String[] args) { String[] vowels = { "a", "e", "i", "o", "u" }; for (final String str : vowels) { System.out.println(str); } } }
Since the String str is declared as final, this code should not compile. However, this is working fine, because internal the structure of for-each loop is actually just as show below:
public class ForEachLoop { public static void main(String[] args) { String[] vowels = { "a", "e", "i", "o", "u" }; for (int i = 0; i < vowels.length; i++) { final String str = vowels[i]; System.out.println(str); } } }
Therefore, str is a local variable and during each iteration of the loop a new different final local variable is created.