文章目录
😹 作者: gh-xiaohe
😻 gh-xiaohe的博客
😽 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!!
🚏 类型转换
🚀 自动类型转换
什么是自动类型转换,为什么要学习自动类型转换?
- 类型范围小 的变量,可以直接赋值给类型范围大的变量。
public class TypeDemo1 {
public static void main(String[] args) {
// 目标:理解自动类型转换 类型范围小的变量赋值给类型范围大的变量
byte a = 12;
int b = a; // 发生了自动类型转换
System.out.println(a);
System.out.println(b);
}
}
🚬 自动类型转换的底层原理
🚬 自动类型转换的其他形式
public class TypeDemo1 {
public static void main(String[] args) {
// 目标:理解自动类型转换 类型范围小的变量赋值给类型范围大的变量
byte a = 12;
int b = a; // 发生了自动类型转换
System.out.println(a);
System.out.println(b);
int age = 23;
double db = age; // 自动类型转换 age变量有4个字节 double变量 有八个字节 无影响 小数 23.0
System.out.println(db);
char ch = 'a'; // 00000000 01100001 两个字节
int code = ch; // 00000000 00000000 00000000 01100001 四个字节
System.out.println(code);
}
}
🚬 总结
- 为什么要进行类型转换?
- 存在不同类型的变量赋值给其他类型的变量
- 自动类型转换是什么样的?
- 类型范围小 的变量,可以直接赋值给类型范围大的变量。
🚄 表达式的自动类型转换
- 在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算。
🚬 注意事项:
- 表达式的最终结果类型由表达式中的最高类型决定。
- 在表达式中,byte、short、char 是直接转换成int类型参与运算的。
- why? 为什么 byte 需要当成int 来运算 自己定义时,不会超出范围,但是两个数值 进行运算时
超出范围的概率很大
public class TypeDemo2 {
public static void main(String[] args) {
//目标:掌握表达式的自动类型转换的规则。
byte a = 10;
int b = 20;
double c = 1.0;
double rs = a + b + c;
System.out.println(rs);
double rs2 = a + b - 2.3;
System.out.println(rs2);
// 面试题
byte i = 100;
byte j = 120;
int k = i + j; //
// byte k1 = i + j; //在表达式中,byte、short、char是直接转换成int类型参与运算的。 所以在用 byte 接范围小
// why? 为什么 byte 需要当成int 来运算 自己定义时,不会超出范围,但是两个数值 进行运算时 超出范围的概率很大
System.out.println(k);
}
}
🚬 总结
- 表达式的自动类型转换是什么样的?
- 小范围的类型会自动转换成大范围的类型运算。
- 表达式的最终结果类型是由谁决定的?
- 最终类型由表达式中的最高类型决定。
- 表达式的有哪些类型转换是需要注意的?
- byte、short、char 是直接转换成int类型参与运算的。
🚒 强制类型转换
🚬 场景
🚬 问题
- 类型范围大的数据或者变量,不能直接赋值 给类型范围小的变量,会报错。
🚬 强制类型转换
- 可以强行将类型范围大的变量、数据赋值给类型范围小的变量。
public class TypeDemo3 {
public static void main(String[] args) {
// 目标:理解强制类型转换,并使用。
int a = 20;
byte b = (byte)a;
System.out.println(a);// 20
System.out.println(b);// 20
int i = 1500;
byte j = (byte) i;
System.out.println(j); // -36 数据丢失 byte 1个字节 -128 ~ 127
double score = 99.5;
int it = (int) score;
System.out.println(it); // 99
}
}
🚬 强制类型转的底层原理
🚬 注意事项
- 强制类型转换 可能造成数据(丢失)溢出;
- 浮点类型强转为整型,直接丢掉小数部分,保留整数部分返回。
🚬 总结
- 什么是强制类型转换?
- 可以强行将类型范围大的变量、数据赋值给类型范围小的变量。
- 可以强行将类型范围大的变量、数据赋值给类型范围小的变量。
- 强制类型转换有哪些需要注意的?
- 可能出现数据丢失。
- 小数强制转换成整数是直接截断小数保留整数。