下面这个小程序给我们展示了JAVA中符号扩展的有趣之处。
public class Muticast{
public static void main(String[ ] args){
System.out.println((int)(char)(byte) - 1 );
}
}
本程序运行结果是:65535 o(∩_∩)o...哈哈
上面的程序涉及到了JAVA中的多重转型。在涉及到多重转型时有一个简单的规则:如果最初的数值是有符号的,那么就进行符号扩展,如果是char,不管要转为什么类型都进行零扩展。有了这条规则,上面的程序应该就清晰了,首先-1转为byte时,截取低八位,这样就为11111111,当byte转为char时,因为byte是有符号的,所以做符号扩展,这样就扩展为了1111111111111111,这样它表示2的16次再减1,即为65535.这时候已经转成了char型了,当是char时做零扩展,当转为int型时值不变。