在Java中存在两种数据的转换形式 ,一是隐形转换,另外一个是强制转换。
一. 隐形转换
什么是隐形转换呢?隐形转换就是在进行运算或者在赋值的时候自动的进行类型的提升。但是隐形转换只会在小类型转换为大类型的时候生效,如图:
定义了一个int类型的b,将byte类型的a赋值给b,因为byte类型比int类型小,所以这是一个隐性转换,将byte类型的a提升为int类型。
public class byte_ {
public static void main(String[] args) {
byte a = 10;
int b = a;
System.out.println(b);
}
}
二. 强制转换
强制转换顾名思义,就是将大类型的数据强行转换成比他小的类型数值,但是如果强制转换的数值超出了转换类型的范围,就会出现数值错误。
强制类型转换格式就是在要转换的值前面加:(输入要转换的类型)+ 定义的变量名
public class byte_ {
public static void main(String[] args) {
int c = 200;
byte d = (byte) c;
System.out.println(d);
}
}
如图,将int类型的数值强制转换为byte类型,并且超过了byte类型的最大值所以出现了错误。
三. 运算
在进行运算的时候,也会自动的进行类型转换。如代码,虽然是byte类型的变量相加,但是最后的结果却是int类型,因为他们在进行相加的时候进行的类型提升。
public class byte_ {
public static void main(String[] args) {
byte a = 10;
byte b = 20;
int sum2 = a + b;
}
}
如果非要用byte类型进行相加的话,就在a和b相加之和进行转换。如下,运用运算符的优先顺序,把a和b加完后的值进行类型转换,但是要注意加完后的值如果超出的类型范围也会出现错误!
public class byte_ {
public static void main(String[] args) {
byte a = 10;
byte b = 10;
byte sum = (byte) (a + b);
}
}