我现在正在阅读Java Puzzler,在问题6中,它提到了基本数据类型的转换。 然后我想尝试将(-1)转换为char并打印它。它应该打印-1的ascii代码,对吧?但是没有一个字符的ascii是-1而且有人告诉我它应该是255而不是。事实上,它输出'?',是否有人可以给我一个理由?
谢谢你,感谢大家感恩节。
答案 0 :(得分:2)
将-1放入char会使其溢出为0xFFFF(因为它是unsigned 16 bit value。)0xFFFF is a non-character,因此?
。
如果溢出产生的字符不是非字符,则显示正常:
char x = (char)-65500;
System.out.println(x); //Prints $
同样的原则,只是这次我们已经溢出到一个实际上附有定义字符的值(36,美元符号。)注意没有实际的应用 - 你永远不想故意溢出一个字符将其设置为负值。
答案 1 :(得分:1)
当您将-1
转换为char
时,您获得65535
字符为char
是无符号的16位整数。无论何时将较大的整数转换为16位值,都会保留较低的16位。根据定义,这是一个无效字符,因此将始终打印为?
或<?>
BTW (char) 255
是有效字符。