byte b = 'b';
System.out.println(b);上面代码正常,打印出98 byte b = '中';
System.out.println(b);报 Type mismatch: cannot convert from char to byte
如果 按照java 语法,两个例子都会报cannot convert from char to byte
错而第一个例子没有
这是不是说明类型为char的小于255实际是用byte存储,当大于255时才会用两个字节存储或是什么别的原因

解决方案 »

  1.   

    不是吧,我觉得是都是2个字节存储,只是如果可以转为byte的话就转换,不能转换为byte的话就报错
      

  2.   

    char为2个字节,如果高字节全为0的话,就能转为byte,因为不影响结果,否则不行,我是这么估计的
      

  3.   

    在java中,byte分配一个字节,因此范围是-2^7~2^7-1。
    char一般分配为两个字节。java中char常量使用的是Unicode字符集,‘b'在Unicode就是第98个字符,而'中'是第20013个。
    因此,在将‘b'转换为byte类型时,它没有超过2^7-1,java解释器通过了;而'中'超过了2^7-1,因而java解释器会提示你这样做可能损失精度的,如果你byte b = (byte)'中'这样强制转换,是可以编译通过的,也就是说你默认接受了精度的损失。
      

  4.   

    char不能强制转化为byte的,'b'可以被识别为一个byte,也可以识别为一个char,它可以赋值给byte或char类型,但'中'不一样,java认为汉字是二个byte(参见 unicode),因此不能赋值给一个byte。
    即 
    char a='a';
    byte b=(char)a;//Type mismatch: cannot convert from char to byte
    char b='中';
    byte bb=(char)b;//Type mismatch: cannot convert from char to byte
      

  5.   

    大约创造者们就是这么规定的嘛。给byte赋值的时候,'b'就当成一个Unicode码处理了。
      

  6.   

    按照char都是两个byte的理论来说,那真说不过去了!这也可能是java的灵活之处吧!
    正如楼主所说:
                类型为char的小于255实际是用byte存储,当大于255时才会用两个字节存储 !我也这么认为!
      

  7.   

    一个字符占用8位,一个汉字占用16位,byte是8位。