好的,您在那里有几个非常不同的问题。
我认为第一个问题是:
为什么会看到?当您输出ch2
和ch3
因为您输出的是无效字符。Java字符代表UTF-16代码点,而不是实际字符。UTF-16中的某些Unipre字符需要
两个 Java
char来存储。有关Unipre FAQ的
UTF-16的更多信息,请参见。在UTF-16,这个值
0xFFFF(这是你的东西
ch2,并
ch3包含)不是作为一个独立的值有效;
即使存在,也没有Unipre U +
FFFF字符。
输入以下内容
ch22:您看到一个小方框的原因是您正在输出字符
0(结果
(char)65536为
0,请参见下文),这是一个“控制字符”(所有低于32的字符-
正常空格字符-是各种控制字符)。字符
0是“空”字符,我不知道它没有公认的标志符号。
为什么这样做时没有错误int a11 = 65536; char ch22 = (char) a11;
?
因为这就是Java
缩小的原始转换的定义方式。没有抛出任何错误;而是仅使用相关的位:
将有符号整数缩小为整数类型T会简单地丢弃除n个最低阶位以外的所有位,其中n是用于表示类型T的位的数量。除了可能丢失有关数值幅度的信息外,
,这可能导致结果值的符号与输入值的符号不同。



