Java 使用foreach时获得异常,但常规for循环执行良好

Java 使用foreach时获得异常,但常规for循环执行良好,java,for-loop,exception,foreach,Java,For Loop,Exception,Foreach,使用常规foloop,获得正确的输出,使用for each循环抛出ArrayOutOfBound异常。有人能解释一下吗 public class FindTheDiff { public static void main(String args[]){ System.out.println(isAnagramRecursion("all","laa")); } private static boolean isAnagramRecursion(S

使用常规foloop,获得正确的输出,使用for each循环抛出ArrayOutOfBound异常。有人能解释一下吗

public class FindTheDiff {
public static void main(String args[]){
    System.out.println(isAnagramRecursion("all","laa"));
}

private static boolean isAnagramRecursion(String param1, String param2) {
    int[] arr = new int[122];
    char[] param1Lower = param1.toLowerCase().toCharArray();
    char[] param2Low2 = param2.toLowerCase().toCharArray();

    for (char ch1 : param1Lower) {
        arr[ch1] = arr[ch1]+1;
    }

    for (char ch2 : param2Low2){
        arr[ch2] = arr[ch2]-1;
    }

    for (int i :arr) {
        if(arr[i] != 0)
            return false;
    }
    /*for (int i = 0; i < arr.length; i++) {
        if(arr[i] != 0)
            return false;
    }*/
    return true;
}

}这是错误的循环。在执行forEach循环时,迭代的是值,而不是索引。在您的情况下,正确的forEach循环应该是:

for (int arrValue :arr) {
    if(arrValue != 0)
        return false;
}

这是错误的循环。在执行forEach循环时,迭代的是值,而不是索引。在您的情况下,正确的forEach循环应该是:

for (int arrValue :arr) {
    if(arrValue != 0)
        return false;
}
这里我不是数组的索引,而是数组的值。但在常规循环中,i是索引

for (int i :arr) {
    if(arr[i] != 0)
       return false;
}
在if条件下使用数组means i的值

for (int i :arr) {
    if(i != 0)
        return false;
}
这里我不是数组的索引,而是数组的值。但在常规循环中,i是索引

for (int i :arr) {
    if(arr[i] != 0)
       return false;
}
在if条件下使用数组means i的值

for (int i :arr) {
    if(i != 0)
        return false;
}