我的头脑卡在SCJP 6学习指南中,对于他们在这里提出的观点感到困惑。
关于将字符转换为字符,他们说以下是完全合法的,但是你会失去精确度(我完全可以理解):
char d = (char)-98;
char c = (char)70000;
System.out.println("d = " + d + " c = " + c);
结果是:
d = ? c = ?
这里我很困惑的一点是,在两种情况下,得到的char值都只是一个问号。我本来期望一个荒谬的数值,可能与原始值几乎没有任何关系,但仍然是数字。
为什么结果是问号?我不明白问号在这里是如何“精确度损失”的?
我在SO上看了很多与char有关的问题,并且搜索了很多,但是找不到答案。
它与其他JVM有什么不同?或者它是对所有超出范围的char演员的标准回应?
答案 0 :(得分:3)
将char附加到String时,会追加char(例如'a'),而不是其数值(例如97)。如果您想知道char的数值是什么,请使用
System.out.println("d = " + ((int) d) + " c = " + ((int) c));
答案 1 :(得分:3)
如果将这些字符强制转换为整数,您将看到它们分别具有值65438和4464。那些对应于Unicode字符U + FF9E HALFWIDTH KATAKANA VOICED SOUND MARK和U + 1170 HANGUL JUNGSEONG WE。当您将它们打印为字符时会出现问号,因为您的系统没有为这些字符提供字形的字体。
答案 2 :(得分:1)
答案 3 :(得分:0)
System.out.println((char)65);
打印出来
A
因此,使用损失精度进行的转换不是问号,它是在应用转换后使其成为char的值的char表示。