类型转换
Java是强类型语言,运算过程中需要用到类型转换,在运算中把不同类型的数据先转换成同一种再运算。
类型转换分为两种:
1.自动转换:低到高自动转换
2.强制转换:高到低需要用 (类型)变量名 进行转换
数据类型排序:
低-------------------------------------------------------------高
byte、short、char < int < long < float < double
自动转换例子-int转换double:
public class Demo03{
public static void main(String[] args){
int a = 1;
double b = a;
System.out.println(a);//输出结果:1
System.out.println(b);//输出结果:1.0
}
强制转换例子-int转换byte:
public class Demo03{
public static void main(String[] args){
int a = 1;
byte b = (byte)a;//(类型)变量名
System.out.println(a);
System.out.println(b);
}
}
注意点:
1.不能对布尔值进行转换,因为布尔值按位存储,运算逻辑有问题。
2.不能把对象类型转为不相干类型。
3.在把大容量转为低容量的时候用强制转换。
4.转换的时候可能存在内存溢出或者精度问题。
例1-内存溢出:
public class Demo03{
public static void main(String[] args){
int a = 128;
byte b = (byte)a;
System.out.println(a);//输出结果:128
System.out.println(b);//输出结果:-128 内存溢出,因为byte类型范围只有-128-127,所以在超出范围之后会输出最大范围值
}
}
例2:内存溢出转换实操
public class Demo03{
public static void main(String[] args){
int a =10_0000_0000;
int b =20;
int c =a*b;
long d = a*(long)b;
System.out.println((long)c);//输出结果:-1474836480// 内存溢出,虽然转换成long但是前面的计算过程用的是int计算 所以把结果换成long类型的也无济于事
System.out.println(d);//输出结果:-20000000000//d变量在计算之前转换成的long,所以计算过程是long运算的,所以输出正确
}
}
例子-精度不准:
public class Demo03{
public static void main(String[] args){
double a = 12.21238;
System.out.println((int)a);//输出结果:12 精度不准在double转int的时候把小数点后的数值忽略了
}
}