嘿 我有以下两行代码:
result[i] = temp[i] + temp[i + 1] + " " + temp[i + 2];
i += 2;
我想知道这行代码是否会这样做:
result[i] = temp[i] + temp[i++] + " " + temp[i++];
我可以确定,每个 VM会从左到右处理这条线路吗? 谢谢, 托比
答案 0 :(得分:11)
来自Java language specification:
Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。
建议代码不要严格依赖此规范。当每个表达式最多包含一个副作用时,代码通常更清晰,作为其最外层的操作,并且当代码不依赖于由于从左到右的表达式评估而出现哪个异常时,代码就更清晰了。
答案 1 :(得分:7)
应该是
result[i] = temp[i] + temp[++i] + " " + temp[++i];
如果我没有错,那么在每次递增后计算索引。 除此之外它应该有用。
答案 2 :(得分:7)
让我们试着实际引用the source。
同一条线上的运营商具有相同的优势 优先。当运营商平等 优先权出现在同一个 表达,规则必须治哪个 首先评估。 所有二进制文件 除分配外的运营商 运算符从左到右进行评估 右强>;赋值运算符 从右到左评估。
它看起来像是found a link to the spec。
答案 3 :(得分:4)
不,不一样。当你把++放在我之后它意味着它是后缀时,即我将首先被使用然后递增。
所以:
result[i] = temp[i] + temp[i++] + " " + temp[i++];
如果i = 1:,将与下面相同
result[1] = temp[1] + temp[1] + " " + temp[2];
在此声明之后,我将坐在价值3。
与它相同:
result[i] = temp[i] + temp[i + 1] + " " + temp[i + 2];
您应该使用前缀增量运算符,即:
result[i] = temp[i] + temp[++i] + " " + temp[++i];
答案 4 :(得分:2)
i++ will output the value and increment
++i will increment the value and output.