为什么我在这里的第二行得到StringIndexOutOfBoundsException?

Cle*_*ggy 0 java substring

为什么以下Java代码段会在第三行代码上抛出StringIndexOutOfBoundsException?

String str = "1234567890";
String sub1 = str.substring(0, 3);
String sub2 = str.substring(4, 1);
Run Code Online (Sandbox Code Playgroud)

我原以为上面代码的结果是sub1包含"123"而sub2包含"5",但我得到了上面提到的异常.第一个子字符串调用是否对正在操作的字符串有副作用?

Osc*_*Ryz 5

因为beginIndex大于endIndex

文档:

抛出: IndexOutOfBoundsException -如果将beginIndex为负,或endIndex大于此String对象的长度大,或 的beginIndex 更大的 endIndex的.