【发布时间】:2017-02-19 06:05:52
【问题描述】:
我有以下代码:
int a=-12;
char b=(char) a;
System.out.println(b);
System.out.println(b+0);
它首先打印出一些空字符,然后打印出一个数字 65524。如果我将 a 更改为 16,则显示的数字变为 65520。如果 a 是 -2,则数字是 65534。
如果数字是正数且足够小,它会从 Unicode 表中打印出字符,如果一切正常,则返回字符的数字(与 a 相同),如果不正确(如果 @ 987654327@ 太大)。
例如,对于a = 8451,它返回℃(摄氏度)字符和a 本身(8451),但如果a=84510 它返回一些奇怪的中文符号并且与a 不同的数字(18974)。如果 a 更大 a=845100 它返回空 sumbol 和 58668。
问题是,这些数字是从哪里来的?
我试图找到答案,但到目前为止并不幸运。
编辑由于 int 到 char 是一种缩小转换,请考虑与byte a 相同的问题。现在显然不可能出现太大的数字,但我想知道负数会发生什么 - 将 byte a = -x 转换为 char 会得到与 int a 相同的奇怪数字。
【问题讨论】:
-
char 数据类型是单个 16 位 Unicode 字符。它的最小值为 '\u0000'(或 0),最大值为 '\uffff'(或 65,535 包括在内)。
-
@DevilsHnd,谢谢,我错过了。编辑了帖子。