由于我也是初学者,所以有错误请一定要指正。
隐式转换是什么?转换应该都能理解,那隐式是什么意思?
我看过的视频教程告诉我的是:
- 当两个数据的数据类型不一样的时候,必须进行转换,再进行运算
- 当取值范围小的数据类型的数据,去和一个取值范围大的进行运算,那么,取值范围小的会自动被转换成大的,然后再进行运算
- 当byte,short,char三种类型的数据运算的时候,他们都会自动的被转换成int,然后在进行运算
那么,隐式转换其中的“隐式”,我的理解是:系统自动帮你转换,就叫隐式转换
取值范围顺序(从小到大)
byte < short < int < long < float < double
根据以上几点,我们可以有:
public class Test{
public static void main(String[] args){
int a = 1;
double b = 1.1;
double c = a + b;
// a + b的时候,a先被转换为double类型,再和b进行相加,最终结果赋值到c,所以c也必须是double类型,否则会报错
}
}
public class Test{
public static void main(String[] args){
byte a = 20;
byte b = 30;
int c = a + b;
// byte被自动转换成int类型,所以c也必须是int类型,不然会报错
}
}
public class Test{
public static void main(String[] args){
int a = 1;
long b = 1000L;
double c = 10000;
double result = i + n + d;
// 取值范围小的变取值范围大的,从左到右依次进行,所以result必须是double
}
}
强制转换又是什么?强制是什么意思?
如果把一个取值范围大的值赋值给取值范围小的变量,直接赋值是不行的,必须加入手动强制转换
代码格式:
目标数据类型 变量名 = (目标数据类型)被转换的数据
比如,我们可以有:
public class Test{
public static void main(String[] args){
double a = 2.33;
int b = (int)a
}
}
但是,我们不能有:
public class Test{
public static void main(String[] args){
int a = 1024;
byte b = (byte)a;
// 当被转换的值超过了目标数据类型的取值范围,却还依然进行强制转换,则会发生溢出,不会得到期望的正确结果
}
}
另外,受到隐式转换的影响,会出现一种比较反直觉的强制转换。
比如,两个byte类型的值进行相加,结果必然是int类型的,这时候,我们如果想要把他变成byte类型的结果,必须要进行强制转换:
public class Test{
public static void main(String[] args){
byte a = 1;
byte b = 1;
byte result = (byte)(a + b);
}
}