如何打印字符的最大值?

Hel*_*rld 1 java character

虽然这是一个非常初级的问题,但我发现它很复杂.其实我想知道幕后发生了什么?为什么Character.MAX_VALUE不打印char的最大值(65535)和MAX_VALUE-1的最大值.

    System.out.println("Byte Max Value: "+Byte.MAX_VALUE);//print 127 Ok!
    System.out.println("Character Max Value: "+Character.MAX_VALUE);//print ?(Question Mark)
    System.out.println(Character.MAX_VALUE-1);//print 65534
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 7

因为在第二行中,Character.MAX_VALUE与String连接在一起.

正如JLS所述:

字符串连接运算符+(第15.18.1节),当给定字符串操作数和整数操作数时,它将把积分操作数转换为表示其十进制形式的值的String,然后生成一个新创建的串联的字符串这两个字符串

由于Character.MAX_VALUE不可打印,你没有看到它.

在第三种情况下,你用a进行减法int,因此整个表达式被转换为int并且它打印一个int值.

同样如JLS所述:

当应用于两个数值类型的操作数时,binary +运算符执行加法,产生操作数的总和.

[...]

对操作数执行二进制数字提升(第5.6.2节).

当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则适用,顺序如下:

  1. [...]

  2. 应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:

    如果任一操作数的类型为double,则另一个操作数转换为double.

    否则,如果任一操作数的类型为float,则另一个操作数转换为float.

    否则,如果任一操作数的类型为long,则另一个操作数转换为long.

    否则,两个操作数都将转换为int类型.

如果你做完了

System.out.println("Character Max Value: "+(Character.MAX_VALUE+0));
Run Code Online (Sandbox Code Playgroud)

它会打印出来 Character Max Value: 65535


Pet*_*rey 5

Character.MAX_VALUE 是 \uFFFF。根据定义,这不是可打印的字符。当您执行 -1 或 +1 之类的操作时,您将类型更改为int

http://www.fileformat.info/info/unicode/char/ffff/index.htm