Java中的byte,char,int - 位表示

时间:2013-06-18 10:19:44

标签: java char byte

我对Java中的byte和char感到困惑。我有以下程序段:

    byte b = 65;
    char c = 65;
    short s = 65;
    System.out.println("b:"+b+" c:"+c+ " s:"+s);  // outputs b:65 c:A s:65

b,c和s的位表示相同,它们都是:: 00000000 01000001。 我的问题是,如果位是相同的,那么它们的行为方式不同 - b为byte,c为char,s为short? 另一个问题是:char c = 65;为什么这是正确的陈述?虽然我将一个int值分配给一个char,但它没有给出错误。

感谢。

5 个答案:

答案 0 :(得分:4)

他们的行为有何不同?

参考JLS

  

整数类型是byte,short,int和long,其值分别是8位,16位,32位和64位二进制补码整数,以及char,其值为16-表示UTF-16代码单元的位无符号整数。

     

整数类型的值是以下范围内的整数:

     
      
  1. 对于字节,从-128到127,包括

  2.   
  3. 简而言之,从-32768到32767,包括

  4.   
  5. 对于int,从-2147483648到2147483647,包括

  6.   
  7. 很长一段时间,从-9223372036854775808到9223372036854775807,包括在内

  8.   
  9. 对于char,从'\ u0000'到'\ uffff'(含),即从0到65535

  10.   

另一个区别是他们的包装类不同:byteBytecharCharactershortShort

char c = 65;为什么这是一个正确的陈述?

  

char ,其值为16位无符号整数,表示UTF-16代码单元(§3.1)。

答案 1 :(得分:3)

byte标有Byte

char标有Character

short标有Short

这3个类有3种不同的toString()方法。这就是为什么他们有不同的显示器。

然后,intbytecharshort的转化会自动为您完成,然后将其装箱到相应的拳击课。

答案 2 :(得分:2)

1)它们的位表示不相同,对于字节为01000001,对于short和char为0000000001000001

2)区别在于byte和short是有符号整数,char是16位Unicode字符

3)65不是int,它是常量,如果你尝试分配一个int你会得到一个错误

   int x = 65;
   char c = x;   <-- error

答案 3 :(得分:1)

考虑到数据表示的不同,它们的行为不同,不同之处仅在于它们可以在不同的时间间隔内保存值。

至于char,每个字符都有整数表示,这就是为什么它是java中的有效语法。

答案 4 :(得分:1)

所有原始类型boolean, char, short, int, ...)实际上是内存中的位数组。

变量的类型仅定义此变量可以取值的范围:

  • boolean 1位[范围0-1]
  • char 16位[范围0到216-1或\ u0000到\ uFFFF]
  • byte 8位[范围-128到127]
  • short 16位[-32768至32767]
  • int 32位[-2147483648至2147483647]
  • ...

char由位或互补hex,dec,oct nubmer表示。不要紧。这就是为什么你可以给它分配一个数字,这个nubmer匹配到那个数字的 Unicode 表示。