Postfix一元运算符歧义的Java优先级[重复]

问题描述 投票:0回答:1
有人可以帮助我理解,根据Java规范,后缀运算符(expr ++ expr--)的优先级比一元运算符++ expr --expr高吗?

我问这个是因为我只看到对后缀和一元表达式的求值从左到右开始。

int i = 0; System.out.println(--i + i++); // -1 + -1 = -2 vs. // 0 + 0 = 0

这很清楚,但是在什么时候以及什么情况下,this java优先规则适用于后缀和一元运算符。

第二个问题是为什么java docs表中没有一元后缀?

一元++ expr --expr + expr -expr〜!

编辑:

我进行了更多搜索,并在The Java Language Specification上找到了完整的答案

strange table in the Oracle Tutorial让我与OCA考试准备混在一起。

java post-increment pre-increment
1个回答
0
投票
一元运算符只需要一个操作数,所以后缀运算符也一元。对于您的查询,我将后递增或后递减称为后缀。

多个增量/减量操作不能一起进行。因此,在这种情况下优先级无关紧要。

例如:

x+++++x

这会给您一个编译器错误。为什么?因为对于编译器,它是:

(x++)++ + x

docs

后缀表达式的结果必须是以下类型的变量: 可转换(第5.1.8节)为数字类型或编译时错误 发生。

一元表达式的结果必须是以下类型的变量: 可转换(第5.1.8节)为数字类型或编译时错误 发生。

在第一个x++之后,它不再是变量,因此第二个操作不在变量上发生,而是不允许的值。

但是,您可以添加括号使其正常工作,但是与以前不同。这样的例子之一是:

(x++) + (++x)

但是这些是2个不同的操作,因此优先级是不相关的。    
© www.soinside.com 2019 - 2024. All rights reserved.