【求大神】在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是同一级的吗,为什么常量可以相互自动转换啊 展开
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是同一级的吗,为什么常量可以相互自动转换啊 展开
1个回答
展开全部
在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;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询