为什么此代码中的输出为 1?似乎括号没有给出最大优先级,并且它们中的操作被单独考虑,但并不总是放在第一位......
class Solution2 {
public static void main(String[] args) {
int x = 3;
int y = 5;
System.out.println(y % x * (++x + 0) / 8);
//Вывод: 1 (а не 0 – если бы в первую очередь сработал инкремент, который в скобках...)
}
}
仅仅因为括号中的子表达式并不意味着它将首先执行。如您所知,编程语言中的表达式是用逆波兰表示法计算的。如果我们将表达式写
y % x * (++x + 0) / 8在 OPV 中,我们会得到:即先取除法的余数,再取增量。此外,如果我们查看方法 bytecode
public static void main(String[] args),我们会看到同样的事情: