为什么“foreach”循环会产生异常?

Dmi*_*riy 2 java

我使用 Stack 和 StringBuilder 类编写了用于字符串反转的代码。我注意到这段代码中的 'foreach' 循环会生成 java.util.ConcurrentModificationException,但通常的 'for' 循环不会。所以为什么?

public static String reverse(String str)
{
    Stack<Character> stack = new Stack<>();
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.length(); i++)
        stack.push(str.toCharArray()[i]);
    }


    for (Character c: stack) // generates an exception
    {
        sb.append(stack.pop());
    }

    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

我期望一个反转的字符串,但发生了 ConcurrentModificationException。

Dan*_*elM 5

stack.pop()在迭代堆栈时更改堆栈 ( )。尝试使用不同的循环:

public static String reverse(String str)
{
    Stack<Character> stack = new Stack<>();
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.length(); i++)
        stack.push(str.toCharArray()[i]);
    }


    while(!stack.isEmpty()){
         sb.append(stack.pop());
    }

    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)