2012-03-11 97 views

回答

16

你在做什么是结合类型转换与一元运算符。

让我们看看:

首先,你得值-1,你投的类型long

然后,您执行一元运算+,它不会更改该值,因此您仍然有(long) -1

然后,您将其转换为int,因此我们现在有int -1。然后,你使用一元运算符-,所以我们有-(-1),这是1。我们有char 1。然后,你使用一元运算符+,所以你仍然有1

最后,将值转换为byte,因此您有byte 1。然后它又一次(隐含地)投射到int

5

各种(<type>)部分只是各型间铸造。那么,什么情况是,从右边,阅读1 - >-1 - >(long)-1 - >(int)-1 - >-(int)-1 = 1 - >(char)1) - >(byte)1然后把它分配过程中强制转换为int。类型转换不会导致值的有效更改,因此整个第一行相当于int i = 1;

2

这个从右到左。 -1会变长。然后应用+前缀(不起作用),并将其转换为int。然后 - 获得应用(将其更改为1)并将其转换为char。最后,应用了+前缀(仍然没有效果),并将其转换为字节。

0

让加括号:

int i = ((byte) + ((char) - ((int) + ((long) (- 1))))); 
System.out.println(i); 

基本上这只是一系列铸件和一元运算符(+什么都不做,-无效)

完整的程序流程是luiscubal的答案