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时才会用两个字节存储或是什么别的原因
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时才会用两个字节存储或是什么别的原因
char一般分配为两个字节。java中char常量使用的是Unicode字符集,‘b'在Unicode就是第98个字符,而'中'是第20013个。
因此,在将‘b'转换为byte类型时,它没有超过2^7-1,java解释器通过了;而'中'超过了2^7-1,因而java解释器会提示你这样做可能损失精度的,如果你byte b = (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
正如楼主所说:
类型为char的小于255实际是用byte存储,当大于255时才会用两个字节存储 !我也这么认为!