1. 自动类型转换:容量小的类型自动转换成容量大的数据类型(无精度丢失)
(1) byte,short,int三种类型,在计算时,会自动转换成 int 类型。
// byte -> short 自动转换
public class Test{
public static void main(String[] args){
byte b = 10;
short s = b;
}
}
// short -> int 自动转换
public class Test{
public static void main(String[] args){
byte b = 10;
short s = b;
int ha = s;
}
}
// int -> long 自动转换
public class Test{
public static void main(String[] args){
int a = 10;
long lon = a;
}
}
(2) char类型自动转 int 类型时,结果输出为对应的ASCII码
// char -> int 自动转换
public class Test{
public static void main(String[] args){
char sex = '男';
int sex2 = sex;
System.out.println(sex2);
}
}
//结果输出为 30007 ,表示‘男’这个字符的ASCII码
(3) float类型转double类型
// float -> double 自动转换
public class Test{
public static void main(String[] args){
float f = 20f;
double d = f;
System.out.println(d);
}
}
//输出结果为 20.0
2. 强制类型转换:容量大的类型强制转换成容量小的数据类型 (精度可能丢失)
(1) 直接利用自动转换,程序会发生报错
//小容量转大容量类型,程序会报错
// int -> short 自动转换; 程序报错!
public class Test{
public static void main(String[] args){
short a = 10;
a = a + 1; //这里 1 属于int类型
System.out.println(a);
}
}
// int -> byte 自动转换; 程序报错!
public class Test{
public static void main(String[] args){
byte a = 10;
a = a + 1; //这里 1 属于int类型
System.out.println(a);
}
}
// long -> int 自动转换; 程序报错!
public class Test{
public static void main(String[] args){
int a = 10;
long b =12;
a = a + b;
System.out.println(a);
}
}
// float 转 double 同理
(2) 利用强制类型转换,可以避免程序报错,且转换成功
// 强制类型转换
public class Test{
public static void main(String[] args){
short s1 = 10;
s1 = (short)(s1 + 1); // 1为int类型
System.out.println(s1);
}
}