自动类型转换
什么是自动类型转换?
类型范围小的变量,可以直接赋值给类型范围大的变量。
自动类型转换的底层原理:
首先申请一个大小为8位的空间把a的值12以二进制的形式存进去,然后有申请了一个大小为32位的空间把a值的二进制存到b的后8位中其余位填充0.这样就完成了自动类型转换。
自动类型转换的其他形式
public class zhuanhuan {
public static void main(String[] args) {
// 自动转化
int age =23;
double b = age; //自动类型转换
System.out.println(b); //23.0
char ch = 'a';
int code = ch;
System.out.println(code); //97
}
}
表达式的自动类型转换
在表达式中、小范围类型的变量会自动转换成当前较大范围的类型再运算。
package dreamcode;
public class zdzhuanhuan {
public static void main(String[] args) {
// 表达式的自动类型转换的规则
byte a = 10;
int b = 10;
double c = 1.0;
double rs = a + b + c;
System.out.println(rs);
double rs1 = a + b - 2.3;
System.out.println(rs1);
byte i = 10;
byte j = 20;
// byte k = i + j; 在代码底层i和j都是当做int计算的
int k1 = i + j;
System.out.println(k1);
}
}
1.表达式的最终结果类型由表达式中的最高类型决定**。
2. 在表达式中,byte、short、char是直接准换成int类型参与运算的。**
强制类型转换
问题:类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。
强制类型转换: 可以强行将类型范围大的变量、数据赋值给类型范围小的变量。
package dreamcode;
public class qiangzhizhuanhuan {
public static void main(String[] args) {
// 强制类型转换,并使用
int a = 20;
byte b = (byte) a;
System.out.println(b); // 20
}
}
强制类型转换底层原理:
首先申请一个大小为32位的空间把a的值20以二进制的形式存进去,其余位填充0,然后有申请了一个大小为8位的空间把a值的后八位二进制存到b中.这样就完成了强制类型转换。
package dreamcode;
public class qiangzhizhuanhuan {
public static void main(String[] args) {
// 强制类型转换,并使用
int i = 1500;
byte j = (byte) i;
System.out.println(j); //-36
}
}
首先申请一个大小为32位的空间把i的值1500以二进制的形式存进去,其余位填充0,然后有申请了一个大小为8位的空间把i值的后八位二进制存到j中.这样就造成了数据丢失,结果j中是-36。
注意事项:
1、强制类型转换可能造成数据(丢失)溢出;
2、浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。
package dreamcode;
public class qiangzhizhuanhuan {
public static void main(String[] args) {
// 强制类型转换,并使用
double score = 99.5;
int it = (int)score;
System.out.println(it); //99
}
}