此处,int和float的位深度在进行隐式转换的位置相同 在第二个字符中,char和short的深度相同,但是显式转换已完成。这背后的原因是什么?
隐式转换
int k = 100; //32bits
float l = k ; //32bits
显式转换
char e = 'B'; //16 bits
short f = (short)e; //16 bits
答案 0 :(得分:2)
尽管short
和char
都是16位(2字节)变量,但它们的范围不同。
Char是一个无符号变量。
Short是一个有符号变量。
char类型的范围是从0到65535)。
短路的范围是从(-32,768到32,767)。
由于这种差异,java会强制您显式进行强制转换,因为值超过32,767的char被强制转换为short可能导致无效转换。对于char的负空投也是如此。
这也是将int强制转换为long的原因(因为int的值始终适合long。但是您必须显式将long强制转换为int(告诉编译器您愿意接受数据丢失/损坏的风险)
答案 1 :(得分:2)
在Java中,加宽类型转换是隐式的,而收窄类型转换是显式的。 即使它们的大小相等。
日期类型层次结构如下,
byte-->short-->int-->long-->float-->double