类型转换
概述:不同类型的数据之间可能会进行运算,而这些数据取值范围不同,存储方式不同,直接进行运算可能会造成数据损失,所以需要将一种类型转成另一种类型再进行运算。
分类:1.自动(隐式)类型转换
小类型转大类型,自动替身为大类型,运算结果是大类型
数据类型的范围从小到大如下:
byte,short,char--->int(默认的整型)--->long--->float--->double(默认的浮点型)
boolean类型不参与比较,它的值只有true和false两个
2.强制(显示)类型转换
手动将大类型转换成小类型,运算结果是小类型
格式:目标类型 变量名=(目标类型)要转换的值
注意:强制类型转换再使用的时候可能会出现精度丢失的问题
类型关系图:
注意事项:当且仅当大类型数据可以转换为小类型数据时,才进行转换,否则会造成精度损失(例:当浮点数(小数)转换为整数,
浮点数小数点后面的值会丢失)
例:
如果定义两个变量,一个为int型,一个为byte型,他们运算的结果是一个int型,所以可以定义一个int变量来进行接收他们的计算的结果
public class d { public static void main(String[] args) { //定义的格式:数据类型 变量名=初始值 //定义一个int类型的数据和一个byte类型的数据 int bb=4; byte aa=5; int cc=aa+bb; System.out.println(cc); } }
运算结果为:
9
但是如果使用byte来接收呢,程序就会报错,这个错误主要是因为当不管是什么short,byte,还是char类型计算的时候都会转换成int类型来进行计算,所以在int类型和byte类型计算的时候,会先将byte类型转换为int类型,结果也是int类型。这个时候如果还是要求数据类型
为byte类型呢?这个时候就需要用到强制类型转换了,将aa和bb运行的结果强制转换为byte就可以了。
public class d { public static void main(String[] args) { //定义的格式:数据类型 变量名=初始值 //定义一个int类型的数据和一个byte类型的数据 int bb=4; byte aa=5; byte cc=(byte)(aa+bb); //aa和bb的结果为int类型,强制转换为byte类型 System.out.println(cc); } }
运行结果为:
9
但是强制类型转换是不能随随便便就运行的,有时候会造成精度丢失的情况,比如将一个浮点数类型的数据强制转换为一个int类型的数据:
public class d { public static void main(String[] args) { //定义的格式:数据类型 变量名=初始值 double dd=5.4; int qq=(int)dd; //强制转换为整型 System.out.println(qq); } }
运行结果为:
5