char to byte

fuyou001 2009-09-13 09:23:29
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时才会用两个字节存储

或是什么别的原因

...全文
504 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinahnzhou 2010-12-07
  • 打赏
  • 举报
回复
一个字符占用8位,一个汉字占用16位,byte是8位。
youyou1225 2009-09-14
  • 打赏
  • 举报
回复
按照char都是两个byte的理论来说,那真说不过去了!这也可能是java的灵活之处吧!
正如楼主所说:
类型为char的小于255实际是用byte存储,当大于255时才会用两个字节存储 !

我也这么认为!
舷Kelvin 2009-09-14
  • 打赏
  • 举报
回复
大约创造者们就是这么规定的嘛。给byte赋值的时候,'b'就当成一个Unicode码处理了。
fuyou001 2009-09-14
  • 打赏
  • 举报
回复
自己再顶下
pigjavalife 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fuyou001 的回复:]
引用 2 楼 gesanri 的回复:
不是吧,我觉得是都是2个字节存储,只是如果可以转为byte的话就转换,不能转换为byte的话就报错


如果都2字节 ,怎么解释第一个例子
[/Quote]
最好的解释是编译器会检查你是否是225以内的编码,否则不让通过,事实编译器就是这么做的
fuyou001 2009-09-14
  • 打赏
  • 举报
回复
fuyou001 2009-09-14
  • 打赏
  • 举报
回复
再顶下
bayougeng 2009-09-13
  • 打赏
  • 举报
回复
确实很奇怪。关注。
linloveby 2009-09-13
  • 打赏
  • 举报
回复
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
fuyou001 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crane99 的回复:]
在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)'中'这样强制转换,是可以编译通过的,也就是说你默认接受了精度的损失。


[/Quote]

我关注的点不是精度损失,而是类型类型转换错误

crane99 2009-09-13
  • 打赏
  • 举报
回复
在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)'中'这样强制转换,是可以编译通过的,也就是说你默认接受了精度的损失。

fuyou001 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gesanri 的回复:]
不是吧,我觉得是都是2个字节存储,只是如果可以转为byte的话就转换,不能转换为byte的话就报错
[/Quote]

如果都2字节 ,怎么解释第一个例子
gesanri 2009-09-13
  • 打赏
  • 举报
回复
char为2个字节,如果高字节全为0的话,就能转为byte,因为不影响结果,否则不行,我是这么估计的
gesanri 2009-09-13
  • 打赏
  • 举报
回复
不是吧,我觉得是都是2个字节存储,只是如果可以转为byte的话就转换,不能转换为byte的话就报错
java_object 2009-09-13
  • 打赏
  • 举报
回复
你说 对了,汉字就是 2个字节 存储的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧