网站 制作软件,专门做音效的网站,网站后台设置,手机自助建站永久免费转载自 Java中的基本数据类型转换#xff08;自动、强制、提升#xff09; 说基本数据类型转换之前#xff0c;先了解下 Java 中的 8 种基本数据类型#xff0c;以及它们的占内存的容量大小和表示的范围#xff0c;如下图所示。 重新温故了下原始数据类型#xff0c;现在…转载自 Java中的基本数据类型转换自动、强制、提升 说基本数据类型转换之前先了解下 Java 中的 8 种基本数据类型以及它们的占内存的容量大小和表示的范围如下图所示。 重新温故了下原始数据类型现在来解释下它们之间的转换关系。
自动类型转换
自动类型转换是指数字表示范围小的数据类型可以自动转换成范围大的数据类型。
如
long l 100;int i 200;
long ll i;
具体自动转换如如下图所示。 实线表示自动转换时不会造成数据丢失虚线则可能会出现数据丢失问题。
自动转换也要小心数据溢出问题看下面的例子。
int count 100000000;
int price 1999;
long totalPrice count * price;
编译没任何问题但结果却输出的是负数这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。
int count 100000000;
int price 1999;
long totalPrice (long) count * price;
另外向下转换时可以直接将 int 常量字面量赋值给 byte、short、char 等数据类型而不需要强制转换只要该常量值不超过该类型的表示范围都能自动转换。
强制类型转换
强制类型转换我们再清楚不过了即强制显示的把一个数据类型转换为另外一种数据类型。
如
short s 199;
int i s;// 199double d 10.24;
long ll (long) d;// 10
以上的转换结果都在我们的预期之内属于正常的转换和丢失精度的情况下面的例子就一样属于数据溢出的情况。
int ii 300;
byte b (byte)ii;
300 已经超出了 byte 类型表示的范围所以会转换成一个毫无意义的数字。
类型提升
所谓类型提升就是指在多种不同数据类型的表达式中类型会自动向范围表示大的值的数据类型提升。
把上面的溢出的例子再改下。
long count 100000000;
int price 1999;
long totalPrice price * count;
price 为 int 型count 为 long 型运算结果为 long 型运算结果正常没有出现溢出的情况。