我编写了以下代码来反转给定的字符串:
String str = "abcdef";
char[] strToChar = str.toCharArray();
char[] outString = new char[strToChar.length];
for(int j = 0; j < strToChar.length; ) {
int len = strToChar.length-j;
outString[j++] = strToChar[strToChar.length-j];
}
根据我的理解,初始化从 Right 到 Left 发生。因此,此处strToChar[strToChar.length-j]
应抛出ArrayIndexOutOfBoundException
。
但它运行良好。这是怎么回事?难道不应该对此进行评估吗?
outString[0] = strToChar[6]; //This should throw exception
答案 0 :(得分:1)
如果我查看您的代码,那么您已将条件写为
for(int j = 0; j < strToChar.length;)
这里 strToChar.length 会返回数组的实际长度为6。
使用for循环迭代数组的正确方法是:
for(int j = 0; j < strToChar.length;j++)
索引从0开始,然后转到&lt; strToChar.length
答案 1 :(得分:0)
根据java doc:
Java编程语言保证了操作数 运算符似乎在特定的评估顺序中进行评估, 即,从左到右。
这意味着j
在评估表达式的右侧之前递增。
因此这段代码:
outString[j++] = strToChar[strToChar.length-j];
评估为:
outString[0] = strToChar[6-1];
而不是:
outString[0] = strToChar[6-0];