【求大神】在java中关于char与byte short 的常量自动转换问题

为什么char与byteshort的常量可以相互自动转换啊byteb1='a';//正确b1=97charc1=(byte)97;//正确c1='a'byteb2=c1;... 为什么char与byte short 的常量可以相互自动转换啊
byte b1='a';//正确 b1=97
char c1=(byte)97;//正确 c1='a'
byte b2=c1;//报错
char c2=b1;//报错

short s1='a';//;正确 s1=97
char c3=(short)98;//正确 c3='b'
short s2=c3;//报错
char c4=s1;//报错

不是说 byte char short是同一级的吗,为什么常量可以相互自动转换啊
展开
 我来答
liuyang054
推荐于2016-10-11 · TA获得超过9093个赞
知道大有可为答主
回答量:5317
采纳率:78%
帮助的人:5327万
展开全部

在Java中,char是16bit长的无符号整数,因此范围是:0~65535,而short则是16bit长的带符号整数,范围是-32768~32767。 所以,两者虽然字长相同,但意义却不一样(表示范围并不完全重合或包含),因此不管是char转换成short,还是short转换成char,都可能“丢失精度”,因此必须强制转换。虽然,这里的“丢失精度”跟从int到short的丢失精度给人的感觉似乎不一样,但仔细想想也没有什么区别,一方面,char有16个bit表示数值,而short用于表示数值大小的只有15个bit,因此,从char到short会“丢失数值精度”,而另一方面,short有1个bit表示数值的符号,而char却根本没有这么个符号位(所有的bit都用来表示数值大小了),所以从short到char也可能“丢失精度”,只是这里丢失的是有关正负的“精确程度”。


你上面的代码改成如下:

byte b1='a';//正确 b1=97
char c1=(byte)97;//正确 c1='a'
byte b2=(byte) c1;
char c2=(char) b1;

short s1='a';//;正确 s1=97
char c3=(short)98;//正确 c3='b'
short s2=(short) c3;
char c4=(char) s1;


顺便提一句:每一句java代码的结束语句后面的分号必须是英文输入法状态下的分号。否则报错。

追问
那为什么 char类型的常量就可以赋值给byte类型呢。  比如 byte a='a';  //正确
byte b=(char)20;//正确 而变量就不可以了呢 比如 char c='a'; byte d=c;//报错
追答
这里转换需要强制转换啊 因为丢失精度的问题。  所以改成byte d = (byte)c;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式