数据类型转换
1.自动转换:
当满足以下条件时,Java 会自动进行类型转换:
- 转换后的类型要比原类型有更大的容量。
- 转换过程不会造成数据丢失。
- 基本数据类型的自动转换顺序(按容量从小到大排列)是:byte → short → char → int → long → float → double
2.强制转换:
当需要把容量大的类型转换为容量小的类型时,就需要使用强制类型转换。不过,这种转换可能会导致数据精度丢失或者溢出。
- 格式:目标类型 变量名 = (目标类型) 原类型变量;
- EX:
double d = 3.14; int i = (int) d; // 强制将double类型转换为int类型,结果为3,小数部分被舍弃
- EX:
- 注意:转换时的注意要点:
- 精度丢失:在将浮点数转换为整数时,小数部分会被直接舍弃。
- 溢出风险:当把大范围的整数强制转换为小范围的整数时,可能会得到意想不到的结果。
- EX:
int largeNum = 300; byte b = (byte) largeNum; // 结果为44,这是因为发生了溢出
- EX:
- boolean 不可与其他基本类型互相转换
- EX:
boolean b = true; int num = (int) b; // 编译错误:无法将boolean转换为int double d = 1.0; boolean bool = (boolean) d; // 编译错误:无法将double转换为boolean
- EX:
- 其他问题
public class Demo2 { public static void main(String[] args) { //操作比较大的数时候,注意溢出问题 //数字之间可用下划线分割,增加可读性,下划线不会被输出 int money = 10_0000_0000; int years = 20; int total1 = money * years; System.out.println(total1);//输出为:-1474836480,数据溢出 System.out.println("================================="); long total2 = money * years; System.out.println(total2);//输出为:-1474836480,money和years在输出前已经出现溢出问题 System.out.println("================================="); long total3 = money * (long)years; System.out.println(total3);//输出为:20000000000,把一个转换为long即可 //写代码时,L写大写,避免为数字1混淆 } }