发布网友 发布时间:2022-05-17 09:29
共1个回答
热心网友 时间:2023-10-17 11:37
在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顺便提一句:每一句java代码的结束语句后面的分号必须是英文输入法状态下的分号。否则报错。
追问那为什么 char类型的常量就可以赋值给byte类型呢。 比如 byte a='a'; //正确追答这里转换需要强制转换啊 因为丢失精度的问题。 所以改成byte d = (byte)c;