我在某处读到postfix运算符的优先级高于prefix运算符。
我试过这段代码:
int i=4;
System.out.println(--i+i++);
我预计输出为7,因为我认为首先计算i ++,然后是-i
结果是6,因此编译器可能首先评估前缀。
Plz解释。
答案 0 :(得分:2)
以下是发生的事情:
--i makes i = 3.
您正在进行3 + i++
因为我现在已经3岁了,而你已经在我之后有了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,然后使用i。如果你想使用i然后取一个,请使用i--。此外,如果你想添加1然后使用i,请使用++ i。
答案 1 :(得分:1)
根据定义,在命令之前发生pre(in | de)创建。根据定义,在命令之后发生post(in | de)创建。所以你的命令相当于:
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指出的那样,在实际代码中任何一个都是可怕的。