Java:多个++ - 一行增加。哪一个先?

时间:2011-02-12 15:37:50

标签: java virtual-machine

嘿 我有以下两行代码:

result[i] = temp[i] + temp[i + 1] + " " + temp[i + 2];
i += 2;

我想知道这行代码是否会这样做:

    result[i] = temp[i] + temp[i++] + " " + temp[i++];

我可以确定,每个 VM会从左到右处理这条线路吗? 谢谢, 托比

5 个答案:

答案 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.