Java编译器通过`(byte)+(char) - (int)+(long) - 1`解释什么?

Dav*_*eng 15 java

可能重复:
使用强制转换为基本类型的奇怪java行为

为什么这段代码用Java编写,

int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

打印1?为什么甚至编译?

来源:Java Code Geeks

lui*_*bal 16

你正在做的是将类型转换与一元运算符组合在一起.

所以让我们看看:

首先,您拥有-1您投射到该类型的值long.

然后,执行一元操作+,该操作不会更改值,因此您仍然可以(long) -1.

然后,你把它转换为int,所以我们现在有int -1.然后,你使用一元运算符-,所以我们有-(-1),这是1.

然后你把它投到char,所以我们有char 1.然后,你使用一元运算符+,所以你仍然有1.

最后,该值被转换为byte,所以你有byte 1.然后它再一次(隐含地)投射到int.


Jam*_*ett 5

各种(<type>)部件只是在各种类型之间铸造.所以会发生什么,从右边读取,1>> -1- > (long)-1- > (int)-1- > -(int)-1 = 1- > (char)1)- > (byte)1然后int在赋值期间转换为an .类型转换在任何时候都不会导致值的有效变化,因此整个第一行相当于int i = 1;.