zw3*_*324 9 java increment prefix operator-precedence postfix-operator
我从Java的官方教程中读到前缀和后缀++ - 具有不同的优先级:
后缀:expr ++ expr--
一元:++ expr --expr + expr -expr~!
根据教程,不应该这样
d = 1; System.out.println(d++ + ++d);
打印6(d++使d 2,++d使它3)而不是4?
我知道++d事先评估的解释,但如果d++有更高的优先权++d,为什么不d++首先评估?更重要的是,在什么情况下应该d++表明它具有更高的优先级?
编辑:
我尝试了以下方法:
d = 1; System.out.println(++d * d++);
它返回4.它似乎应该是2*2,而不是1*3.
Kev*_*hou 14
println语句的内部是这个操作(d ++)+(++ d)
d的值递增(d = 2).
然后,在右侧,读取d的值(2)
最后,将d(3)的值放入加法函数中
因此1 + 3导致4
编辑:抱歉格式,我很擅长使用列表哈哈
joe*_*ice 10
关键是从操作返回的内容.
d=1 System.out.println(d++ + ++d); // d is 1 System.out.println(1 + ++d); // d is 2 System.out.println(1 + 3); // d is 3
打印4
不同的优先权并不意味着将首先评估.
这意味着表达式将以这种方式分组.
在这种情况下,d++ + ++d将进行分组(d++) + (++d),并且将按以下顺序评估此二进制表达式:
d++.此子表达式由后缀增量运算符和变量组成,因此它具有以下两种效果:
1d = 2++d.此子表达式由前缀增量运算符和变量组成,因此它具有以下两种效果:
d = 33+使用两个操作数的值评估运算符.
++只能看到前缀和后缀形式之间的不同优先级++d++,它将被解释为++(d++)- 并且这没有任何意义((++d)++也没有任何一个),因为++只适用于变量,而不是值(并且结果是值).
| 归档时间: |
|
| 查看次数: |
3629 次 |
| 最近记录: |