可能重复:
使用强制转换为基本类型的奇怪java行为
为什么这段代码用Java编写,
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)
打印1?为什么甚至编译?
lui*_*bal 16
你正在做的是将类型转换与一元运算符组合在一起.
所以让我们看看:
首先,您拥有-1您投射到该类型的值long.
然后,执行一元操作+,该操作不会更改值,因此您仍然可以(long) -1.
然后,你把它转换为int,所以我们现在有int -1.然后,你使用一元运算符-,所以我们有-(-1),这是1.
然后你把它投到char,所以我们有char 1.然后,你使用一元运算符+,所以你仍然有1.
最后,该值被转换为byte,所以你有byte 1.然后它再一次(隐含地)投射到int.
各种(<type>)部件只是在各种类型之间铸造.所以会发生什么,从右边读取,1>> -1- > (long)-1- > (int)-1- > -(int)-1 = 1- > (char)1)- > (byte)1然后int在赋值期间转换为an .类型转换在任何时候都不会导致值的有效变化,因此整个第一行相当于int i = 1;.