【发布时间】:2017-09-15 14:27:14
【问题描述】:
我编写了以下代码来反转给定的字符串:
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];
}
据我了解,初始化发生在 右 到 左。因此,这里的strToChar[strToChar.length-j] 应该抛出ArrayIndexOutOfBoundException。
但它运行良好。这是怎么回事?不应该这样评价吗?
outString[0] = strToChar[6]; //This should throw exception
【问题讨论】:
-
好吧,你在这里分配
outString[0] = strToChar[6-1],这样不会出错。这里的关键是j++,这将导致右侧部分不引发异常,因为左侧赋值变量将由于后增量而增加j值 -
JLS 声明:“Java 编程语言保证运算符的操作数似乎以特定的计算顺序进行计算,即从从左到右。”
标签: java arrays operators post-increment unary-operator