有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

它怎么能打印“?”在Java中,当我尝试打印字符时(1)

我最近在读Java谜题,在问题6中,它提到了基本数据类型的转换。 然后我想尝试将(-1)转换成字符并打印出来。它应该打印-1的ascii码,对吗?但是没有一个字符的ascii是-1,有人告诉我应该是255。实际上它输出了“?”,有人能给我一个理由吗

谢谢大家,感恩节谢谢大家


共 (2) 个答案

  1. # 1 楼答案

    在字符中放入-1将使其溢出到0xFFFF(因为它是一个unsigned 16 bit value0xFFFF is a non-character,因此?

    如果溢出产生的字符不是非字符,它将显示为罚款:

    char x = (char)-65500;
    System.out.println(x); //Prints $
    

    同样的原则,只是这一次我们溢出到了一个值,该值实际上附加了一个已定义的字符(36,美元符号)请注意,这并没有实际应用——您永远不会希望通过将字符设置为负值来故意使其溢出

  2. # 2 楼答案

    -1强制转换为char时,会得到65535字符,因为char是一个无符号16位整数。无论何时将较大的整数转换为16位值,都会保留较低的16位。根据定义,这是一个无效字符,因此将始终打印为?<?>

    顺便说一句(char) 255是一个有效字符