java - Java 运算符总是从左到右阅读吗?

标签 java operators

假设我们有这样的代码:

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/

相关文章:

C++ 优先级明确列表

linux - 是否可以完全禁用 linux 重定向运算符(<<、>>、<、>、>|)

java - find-bug 错误字符串无法转换为 Util.Map

java - GUI 随机方程生成器

c - c 中的算术运算符,模数 (%) 发出警告。为什么?

objective-c - 星号有时在变量类型上,有时在变量名上。为什么?

java - 使用 EclipseLink 和 UCanAccess 的持久性错误

Java 8 SSLContext.getInstance ("TLSv1.2")是什么意思?

java - 如何在不弹出控制台窗口的情况下从 Windows 7 下的批处理文件运行 java 应用程序?

java - 它的正确答案是 22。但我得到 24。我哪里错了?我最后评估赋值运算符 += 因为它具有最低的优先级