可能重复:
Weird java behavior with casts to primitive typesJava编译器通过“(byte)+(char) - (int)+(long) - 1”解释了什么?
为什么这段代码在Java中,
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
打印1?为什么它甚至编译?
可能重复:
Weird java behavior with casts to primitive typesJava编译器通过“(byte)+(char) - (int)+(long) - 1”解释了什么?
为什么这段代码在Java中,
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
打印1?为什么它甚至编译?
你在做什么是结合类型转换与一元运算符。
让我们看看:
首先,你得值-1
,你投的类型long
。
然后,您执行一元运算+
,它不会更改该值,因此您仍然有(long) -1
。
然后,您将其转换为int,因此我们现在有int -1
。然后,你使用一元运算符-
,所以我们有-(-1)
,这是1
。我们有char 1
。然后,你使用一元运算符+
,所以你仍然有1
。
最后,将值转换为byte
,因此您有byte 1
。然后它又一次(隐含地)投射到int
。
各种(<type>)
部分只是各型间铸造。那么,什么情况是,从右边,阅读1
- >-1
- >(long)-1
- >(int)-1
- >-(int)-1 = 1
- >(char)1)
- >(byte)1
然后把它分配过程中强制转换为int
。类型转换不会导致值的有效更改,因此整个第一行相当于int i = 1;
。
这个从右到左。 -1会变长。然后应用+前缀(不起作用),并将其转换为int。然后 - 获得应用(将其更改为1)并将其转换为char。最后,应用了+前缀(仍然没有效果),并将其转换为字节。
让加括号:
int i = ((byte) + ((char) - ((int) + ((long) (- 1)))));
System.out.println(i);
基本上这只是一系列铸件和一元运算符(+
什么都不做,-
无效)
完整的程序流程是luiscubal的答案
Source for source http://vanillajava.blogspot.com/2011/10/java-plus.html – 2012-03-11 10:05:45