初始化时后增量++运算符的工作原理

时间:2017-04-19 11:23:30

标签: java arrays operators post-increment unary-operator

我编写了以下代码来反转给定的字符串:

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

2 个答案:

答案 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];