一元运算符真的会先被执行吗?

Does the unary operator really gets executed first?

提问人:Yannick Mussche 提问时间:5/25/2022 最后编辑:Yannick Mussche 更新时间:5/25/2022 访问量:56

问:

我有这个关于优先事项的问题。Java 指出,这是计算运算符的优先级(从高到低):

  1. postfix 一元翼 xyz++, xyz--
  2. 前缀unary opartors ++xyz, --xyz
  3. 类型转换/转换
  4. "* / %
  5. "+ -
  6. << >>
  7. < <= > >=
  8. ==, !=
  9. &
  10. 独家
  11. |
  12. &&
  13. ||
  14. ?:
  15. =, +=, -=, *=, /=, %=

现在,如果你看一下一元运算符,它们会指出:

在一元后缀符号中,一元在表达式之后执行。

这意味着,如果您有:

int a = 2;
int b = a++ * 3;

int b将为 6,因为 a 在表达式后仅得到 +1。

在一元前缀表示法中,一元在表达式之前执行:

int a = 2;
int b = ++a * 3;

int b将是 9。

我的问题是,这是否意味着后缀一元运算符应该在数字 6 和前缀应该在数字 1?我看错了什么?

java 运算符 unary-operator

评论

2赞 Ladislus 5/25/2022
当它说在表达式之后时,它的意思是在它所附加的表达式之后。在此示例中,表达式只是 a
0赞 Ladislus 5/25/2022
在您的示例中,等价于 ,而 是a++ * 3int b = a * 3; a = a + 1;++a * 3a = a + 1; int b = a * 3;
0赞 Yannick Mussche 5/25/2022
我认为表达这个词不是一个很好的选择。将“a”的值存储在“b”中,然后递增和递增“a”,然后将“a”的新值存储在“b”中,这将是更好的选择,并且不会那么令人困惑。正如拉迪斯卢斯所解释的那样。可能是由于翻译。英语不是我的母语。

答:

0赞 Scott Hunter 5/25/2022 #1

在计算后应用一元运算符的“表达式”是 ,而不是它可能属于的任何表达式。a