本篇主要介绍Java语言中的数据类型转换。
数据类型转换,主要是指不同类型的数据在变量赋值、传递和计算过程中,需要从一种数据类型转变为另外一种数据类型。
主要分为两类:基本数据类型转换和引用数据类型的转换。其中基本数据类型转换,主要是上一篇讲的8种基本数据类型之间的类型转换;引用数据类型的转换,主要是指数组、类对象和接口,此处暂不探讨引用数据类型的转换。基本数据类型转换又分为隐式转换和强制转换。
2.1 隐式转换
隐式类型转换也叫自动类型转换,该类型转换按照如下的方向自动发生转换:byte ->char(short) ->int ->long ->float ->double
注意:
1)整数之间的自动类型转换不会发生精度丢失,但整数自动转换为浮点数,有可能发生精度的丢失。
2)Java的表达式具有提升规则,比如表达式中有一个double型的数据参与运算,最终表达式的值就是double型。
3)byte、char与short参与运算时,各自先转为int型再参与运算。
4)int的直接量可以直接赋值给byte、char和short类型变量,只要不超过其范围即可。
long num1 = 100;//int型数据100自动转为long型赋值给num1
long num2 = 1234567890L;
float num3 = num2;//long型数据num2自动转为float
System.out.println(num3);//输出结果为1.23456794E9,发生精度丢失
byte num4 = 10;
char c1 = 'A';
System.out.println(num4+c1);//输出75,字符A自动转为int型65再参与运算
//byte范围为-128~127,int数值100直接赋给num5不发生错误
byte num5 = 100;
byte num6 = 200;//int数值200超出了byte范围,发生编译错误
2.2 强制类型转换
当我们想把double类型转换为int类型时,自动类型转换不能满足我们的要求,此时,我们需要强制类型转换。强制类型转换的语法:
(目的类型)原数据
注意:
1)强制数据类型转换有可能发生精度的丢失。
2)强制转换的数据类型要兼容,并不是任何数据类型之间都可以强制转换
int num7 = (int)10.5;//double型数据10.5强制转为int型,舍弃小数
System.out.println(num7);//输出10
byte num8 = (byte)100L;//该强制类型转换没有精度丢失,因为100未超btye范围
byte num9 = (byte)200L;//输出-56,因为200L强制转为byte丢失精度
int num10 = (int)true;//编译出错,boolean数据与int等数据类型不兼容,不能强制转换
不管是自动类型转换,还是强制类型转换,如果可能发生类型转换,就要考虑到丢失精度的可能性,以防止更改了期望的运算结果,造成不必要的损失。
下一篇我们介绍变量相关的知识。
本文详细介绍了Java语言中的数据类型转换,包括基本数据类型转换和引用数据类型的转换。重点讲解了基本数据类型转换中的隐式转换和强制转换,以及转换过程中可能发生的精度丢失等问题。
1619

被折叠的 条评论
为什么被折叠?



