我们在写Java程序的时候,难免会遇到数据类型转换的问题,根据转换的方式可以分为强制转换和自动转换两种类型。
强制转换
强制转换,顾名思义就能看出,它是强制性的将其转换,也叫作显式类型转换,我们在进行强制转换的时候,在需要转换的数据之前添加()
并在其中写入我们需要转换的类型即可,我们现在还是以程序为例吧:
int i = 128;
byte b = (byte)i;
System.out.println(b);//-128
double d = 3.14;
int d1 = (int)d;
System.out.println(d1);//3
这里的转换直接出现了问题,我们将int类型的128转换为byte时就变成了-128,这里就出现了数据溢出的现象。如果我们将int类型的127转换为byte,它就不会出现问题,因为byte的范围是-128~127。我们将double类型的3.14转换为int类型时就变成了3,出现了精度损失。
自动转换
自动转换就是不需要我们进行手动的转换,它也叫作隐式类型转换,程序会自动的将其进行装换,我们还是利用一段代码要进行演示:
byte b2 = 127;
int i2 = b2;
System.out.println(i2);//127
int i3 = 3;
double d3 = i3;
System.out.println(d3);//3.0
这里就是自动类型转换,将byte类型的127转换为了int类型的127,将int类型的3转成double类型的3.0,我们并未对程序修改什么,它自己就将类型做了转换,所以叫自动类型转换。
接下来我们看看两者的区别:
- 强制类型转换一般是由高到底的转换,自动转换是由底到高的转换。
- 强制类型转换时容易出现精度误差,出现溢出的现象,导致最终的结果出现错误。自动类型转换就不会出现这样的问题。
- 强制类型转换需要我们自己写出转换的类型,但是自动类型转换我们不需要手动的写出转换的类型。
在这里我们也需要注意以下几点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型,不能乱转换
- 把高容量类型转为低容量类型的时候,采用强制转换
- 强制转换的时候可能会存在内存溢出或者精度损失的问题