System.out.println((int)(char)(byte)-1) 输出为65536
这里有一条简单的规则能够描述从较窄的整形转制钱成较宽的整型时的符号扩展行为:如果最初的数值类型是有符号的,那么就执行符号扩展;如果它是char,那么不管它将要被转换成什么类型,都执行零扩展。
因为byte是一个有符号的类型,所以将byte数值-1转换成char时,会发生符号扩展。作为结果的char数值的16个位就都被置位(0)了,因此它等于2^16-1,即65536。从char到int的转型也是一个拓宽原始类型转换,所以这条规则告诉我们,它将执行零扩展而不是符号扩展。作为结果的int数值也就成了65536.