前两天笔试遇到了一个转型的问题:
public static void main(String[] args) {
System.out.println((int)(char)(byte)(-1));
}
以前没遇到过这种问题,回来查查才知道多重转型有条规则:
如果最初的数值类型是有符号的,那么就执行符号扩展;如果他是char,那么不管它将要被转换成什么类型,都执行另扩展.
从这条规则来看.因为byte是有符号的,所以在将byte数值-1转换成char时.会发生符号扩展.作为结果的char数值16位就都被置位了,因此它等于2^16-1(2的16次方减1),就是65535.从char到int的转型也是一个扩展,用规则来说它将执行另扩展,而不是符号扩展.作为int的结果数值就是65535和打印的一样.