永发信息网

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

答案:1  悬赏:70  手机版
解决时间 2021-11-26 13:02
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-11-25 18:02
【求大神】在java中关于char与byte short 的常量自动转换问题
最佳答案
  • 五星知识达人网友:往事隔山水
  • 2021-11-25 18:32
在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;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯