当前位置: 首页 > 科技观察

Java中的基本数据类型转换(自动、强制、提升)

时间:2023-03-15 22:29:27 科技观察

在讲基本数据类型转换之前,先了解一下Java中的8种基本数据类型,以及它们的内存容量和表示范围,如下图所示。重温原来的数据类型,现在来解释一下它们之间的转换关系。自动类型转换自动类型转换是指可以将数字表示范围小的数据类型自动转换为范围大的数据类型。例如:longl=100;inti=200;longll=i;具体的自动转换如下图所示。实线表示自动转换时不会丢失数据,虚线表示可能会丢失数据。自动转换也要注意数据溢出,看下面的例子。intcount=100000000;intprice=1999;longtotalPrice=计数*价格;编译没有问题,但是结果是负数。这是因为两个int相乘的结果是一个int,相乘的结果超出了一个int的表示。范围。在这种情况下,一般会将第一个数据转换成范围较大的数据类型,然后再与其他数据进行运算。intcount=100000000;intprice=1999;longtotalPrice=(long)count*price;另外,int常量字面量在下转换时可以直接赋值给byte、short、char等数据类型,无需强制转换,只要常量值不超过类型的表示范围,就会自动转换。强制类型转换强制类型转换我们再清楚不过了,就是强制将一种数据类型转换成另一种数据类型。例如:shorts=199;inti=s;//199doubled=10.24;longll=(long)d;//10以上的转换结果在我们的预期之内,属于正常转换,丢精度,下面的例子也是数据溢出的情况。intii=300;byteb=(byte)ii;300已经超出了byte类型所代表的范围,所以会被转换成无意义的数字。类型提升所谓类型提升,是指在各种数据类型的表达式中,将自动表示大值的数据类型提升到范围。更改上面的溢出示例。longcount=100000000;intprice=1999;longtotalPrice=价格*计数;price为int型,count为long型,运算结果为long型。运行结果正常,没有溢出。