假设我们有这样的代码:
int k=1;
System.out.println(k++ * ++k);
输出将是三个,这就是我的问题所在。 Java 是否总是这样,而不是首先阅读整行并将前置指令与后置指令分开,从而将其视为:
int k=1;
k+=1;
System.out.println(k*k);
k+=1;
...只是从左到右阅读?或者它是否依赖于编译器而不应该依赖?
最佳答案
k++ * ++k
从左到右计算。
解释:
k++
:先使用k的原始值(即1)- 之后增加 k,所以现在 k 是 2。
++k
:先自增k再使用。所以 k 现在是 3。
k 的初始值为 1,k++ *++k
变为:1 * 3
结果为 3。
请注意,子表达式的副作用在 Java 中定义明确,这使得该表达式在 Java 中有效。像 k++ *++k
这样的表达式会导致 C 或 C++ 中的未定义行为。所以一般要避免这样的表达;)
关于java - Java 运算符总是从左到右阅读吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958369/