如何打印字符的最大值?

时间:2014-05-01 17:54:56

标签: 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

3 个答案:

答案 0 :(得分:7)

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

正如JLS所述:

  

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

由于Character.MAX_VALUE不可打印,因此您看不到它。

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

同样如JLS所述:

  

二进制+运算符在应用于两个操作数时执行加法   数字类型,产生操作数的总和。

     

[...]

     

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

     

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

     
      
  1. [...]

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

         

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

         

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

         

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

         

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

  4.   

如果你已经完成了

System.out.println("Character Max Value: "+(Character.MAX_VALUE+0));

会打印Character Max Value: 65535

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

  

0添加到Character.MIN_VALUECharacter.MAX_VALUE进行隐式投射效果很好   您还可以显式转换为int,以使用两个MIN_VALUE方法获取MAX_VALUEprintln() ....   System.out.println("char min. value: " + (int)Character.MIN_VALUE);
  System.out.println("char max. value: " + (int)Character.MAX_VALUE);
      在你的第三行你有...
  System.out.println(Character.MAX_VALUE-1);//print 65534
      您基本上是将Unicode最大值隐式转换为int,然后从该最大值中减去1。在Unicode格式中,范围从U+0000U+FFFFFFFF65535)是char原始数据类型的数字上限范围,00000)是char数据类型的数字下限。在上面的两个println()方法中,Character类是char原始数据类型的包装类,它只需要原始char并将其包装起来Character课程。Character。允许我们将其视为对象,并允许我们访问MIN_VALUE包装类的字段和方法。
  然后使用点运算符使用MAX_VALUE0字段,我们可以将这些Unicode值转换为int' s,输出是以十进制数表示的范围65535到{{ 1}}
  当然,可以理解的是,如果可以隐式地投射某些东西,也可以明确地投射它       我们也只考虑基本多语言平面(平面0)。通常,通过编写"U+"后跟其四位十六进制数来引用Unicode代码点。因此,平面0中的这些代码点由四位十六进制数表示,没有任何困难。 Unicode代码点只不过是四位十六进制数。平面0可以表示一系列65535个可能的字符。维基百科有一篇关于Unicode的好文章。

http://en.wikipedia.org/wiki/Unicode