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

Java:multiple++-一行增加。哪一个先?,java,virtual-machine,Java,Virtual Machine,哎,, 我有以下两行代码: result[i] = temp[i] + temp[i + 1] + " " + temp[i + 2]; i += 2; 我想知道这行代码是否也会这样做: result[i] = temp[i] + temp[i++] + " " + temp[i++]; 我可以确定,每个虚拟机都会从左到右处理该行吗? 谢谢 托比应该是 result[i] = temp[i] + temp[++i] + " " + temp[++i]; 如果我没有错的话,那么每次递

哎,, 我有以下两行代码:

result[i] = temp[i] + temp[i + 1] + " " + temp[i + 2];
i += 2;
我想知道这行代码是否也会这样做:

    result[i] = temp[i] + temp[i++] + " " + temp[i++];
我可以确定,每个虚拟机都会从左到右处理该行吗? 谢谢 托比应该是

result[i] = temp[i] + temp[++i] + " " + temp[++i];
如果我没有错的话,那么每次递增之后都会计算索引。
除此之外,它应该能工作。

不,它不一样。当你把++放在i之后,它意味着它是后缀,也就是说,i将首先被使用,然后递增

i++ will output the value and increment
++i will increment the value and output.
因此:

如果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];

让我们试着实际引用

同一行上的运算符具有相等的 优先。当运算符等于 优先级出现在同一行中 表达式中,必须有一条规则来管理 首先进行评估全二进制 除赋值外的运算符 运算符从左到右求值 右;赋值运算符是 从右向左计算

它看起来也像某人。

来自:

Java编程语言保证运算符的操作数按特定的求值顺序求值,即从左到右

建议代码不要完全依赖于此规范。当每个表达式包含最多一个副作用(作为其最外层的操作)时,以及当代码不确切地依赖于表达式从左到右求值所产生的异常时,代码通常更清晰


可能不会。取决于它是否在规范中。这两行非常不同:一行更改i,另一行不更改,我担心第二行代码中的其他地方会产生副作用。结果[i]=temp[i]+temp[++i]+“”+temp[++i];会工作的。考虑到Java通常避免了UB的麻烦,我认为它在规范中。但是,(1)您希望preincrement使其等效,(2)它不是最明显的代码(您必须在这里询问,几乎所有其他人也必须查找它!)。即使它是相同的,第一个代码示例更易于理解、维护和调试。这比保存一行代码更重要。+1用于引用可报告的源代码。规范中是否有引用而不是教程中的引用?我找不到。我们是唯一正确解释问题的人吗?我正要出去,所以没有时间检查,但如果我找到了,我会把它添加到答案中。另一张海报找到了规范的参考。修复链接。它指向错误的地方。您还找到了我要找的地方。+1表示“使用规范”。也许重点放在一些方面?:)很好,你是第一个认识到它们肯定不一样的人。
++
也有副作用——另一个重要的区别
result[i] = temp[i] + temp[++i] + " " + temp[++i];