怎么打印'?'在我尝试打印char(-1)时在Java中

时间:2013-11-28 13:55:50

标签: java

我现在正在阅读Java Puzzler,在问题6中,它提到了基本数据类型的转换。 然后我想尝试将(-1)转换为char并打印它。它应该打印-1的ascii代码,对吧?但是没有一个字符的ascii是-1而且有人告诉我它应该是255而不是。事实上,它输出'?',是否有人可以给我一个理由?

谢谢你,感谢大家感恩节。

2 个答案:

答案 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是有效字符。