类型转换
1. 自动类型转换
类型范围小的,可以直接赋值给类型范围大的
底层原理:
byte a = 20;
int b =a; //发生了自动类型转换
System.out.println(a);
System.out.println(b);
a 00001100
b 00000000 00000000 00000000 00001100
可以发现:
byte-->short-->int-->long-->float-->double
char-->int
Q1:为什么要进行类型转换?
W1: 存在不同类型的变量赋值给其他类型的变量
Q2:自动类型转换是什么样的?
W2:类型范围小的变量可以直接赋值给类型范围大的变量
2. 表达式的自动类型转换
在表达式中,较小范围的变量会自动转换为当前较大范围的变量再运算
byte、short、char-->int-->long-->float-->double
表达式的最终结果类型由表达式中的最高类型决定
byte、short、char可以直接转换成int型
//表达式的自动转化类型
byte a = 10 ;
int b = 10 ;
double c= 30 ;
double s = a + b + c ;
System.out.println(s);
//面试题
byte x = 10 ;
byte y = 10 ;
//byte z=x+y错误 byte、short、char是直接转换成int运算的
int z = x + y ;
System.out.println(z);
3. 强制类型转换
-
通常型
int a = 20 ;
//byte b = a ;报错数据类型大的不能直接赋值给小的
byte b = (byte)a;
System.out.println(a);
System.out.println(b);
底层原理:
a 0000000 00000000 00000000 00010100
b 00010100
-
超出型
int i = 1500;
byte j = (byte) i;
System.out.println(j);//-36
i 00000000 00000000 00000101 11011100
j 11011100
double s = 99.5 ;
int t = (int) s;
System.out.println(t);//99
注意强制类型转换会导致数据丢失