隐式转换与显式转换

时间:2019-05-16 14:21:09

标签: java casting

此处,int和float的位深度在进行隐式转换的位置相同 在第二个字符中,char和short的深度相同,但是显式转换已完成。这背后的原因是什么?

隐式转换

int k = 100; //32bits

float l = k ; //32bits

显式转换

 char e = 'B'; //16 bits

 short f = (short)e; //16 bits

2 个答案:

答案 0 :(得分:2)

尽管shortchar都是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

您可以参考Java Language Specification