Java 增量前-增量后优先级问题

Java 增量前-增量后优先级问题,java,operators,prefix,operator-precedence,Java,Operators,Prefix,Operator Precedence,我在某处读到后缀运算符比前缀运算符具有更高的优先级 我尝试了以下代码: int i=4; System.out.println(--i+i++); 我希望输出为7,因为我认为首先计算I++然后--I 找到的结果是6,所以编译器可能首先计算前缀 请解释。以下是发生的情况: --i makes i = 3. 然后您正在执行3+i++ 因为我现在是3,在i后面有+,它是3+3,然后在这一行之后i将变成4。 因此,您正在打印3+3,即6,然后将i更改为4(之后) 不管怎样,。。你到底为什么要这么

我在某处读到后缀运算符比前缀运算符具有更高的优先级

我尝试了以下代码:

int i=4;
System.out.println(--i+i++);  
我希望输出为7,因为我认为首先计算I++然后--I

找到的结果是6,所以编译器可能首先计算前缀


请解释。

以下是发生的情况:

--i makes i = 3.
然后您正在执行
3+i++

因为我现在是3,在i后面有+,它是
3+3
,然后在这一行之后
i
将变成
4
。 因此,您正在打印
3+3
,即
6
,然后将i更改为4(之后)

不管怎样,。。你到底为什么要这么做我不知道,读起来很恐怖

但是,为了学习,您应该尝试:

int i=4;
System.out.println(--i+i++);
System.out.println(i);  
它应该打印6,然后打印4。这是因为当您使用i++时,您使用的是i,然后在后面添加1。当你使用--i时,你从i中减去1,然后使用i。如果你想用我,那就拿一个,用我--。另外,如果要添加1,则使用i,使用++i。

根据定义,在命令之前会发生一个pre(in | de)crement。根据定义,post(in | de)crement发生在命令之后。因此,您的命令相当于:

int i=4;
i -= 1;
System.out.println(i+i);
i += 1;
当括号可以改变事物的意义时,优先权就开始发挥作用。自
(2*3)+4!=2*(3+4)
,我们需要优先级来计算
2*3+4
。类似地,
i+(++i)!=(i+++i
(第一个是
i++=1;i+i
;第二个是
i+i;i++=1;
),因此我们需要括号或优先级来计算
i+++i
。但是括号不可能改变
--i+i++
,所以不需要优先级


但正如NutterzUK所指出的那样,任何这些在实际代码中都是可怕的。

优先级会影响像
i+++i
这样的东西。你写的东西不需要担心优先级,只需要定义前/后增量/减量。@Teepeemm plz depreademize我只是试着做些东西准备考试。最好的方法不是我所关心的,而是它应该是正确无误的。你能解释一下需要使用优先级的情况吗?我想如果一元
-
优先于预减数,那么
--i
将始终被解释为
(--i))==i
。但这将使预减缩永远不会发生,所以在优先顺序(或括号)中没有任何意义。