根据我的理解,强制转换用于将值从一种类型转换为另一种类型。
我在Joshua Bloch和Neal Gafter的书“Java Puzzlers:陷阱,陷阱和角落案例”中找到了以下程序
该程序连续使用三个演员阵容:
public class Multicast { public static void main(String[] args) { System.out.println((int) (char) (byte) -1); } }
我认为它会打印-1但它正在打印它打印65535,但为什么?
答案 0 :(得分:2)
表达式:function get_list (value) {
return [
first_transform(value),
second_transform(value)
]
}
get_list(12)
(int) (char) (byte) -1
的类型为int -1
是一个值为-1的字节(byte) -1
首先将值为-1的字节再次符号扩展为值为-1的32位整数。这意味着所有32位都设置为1(32位的-1的双补码编码)。然后它被转换为(char) (byte) -1
类型,这是一个无符号的16位值,因此你将16位设置为1,其值为65535。char
通过将其再次显式地转换为32位整数,确保将其打印为数字而不是代码点65535的字符。答案 1 :(得分:1)
java中的char是无符号的16位整数。如果将一个负整数文字(如-1)转换为char,则该值将被解释为正数;在这种情况下65535-或Unicode字符\ uFFBF。
仅使用char检查此-1强制转换,
System.out.println( (char) -1);
如果它使用int
或byte
类型投放,则仅返回-1
。