1 自动类型转换
1.1 什么是自动类型转换
- 容量小的数据类型可以自动转换为容量大的数据类型
注:容量的意思是该基本数据类型的表示范围的大小(参照第五课的基本数据类型表示范围)
1.2 基本类型之间的自动类型转换
基本数据类型自动转化图- 图中,黑色实线表示无数据丢失的自动类型转换;红色虚线表示可能存在精度损失的类型转换。
- 特例:可以将整型常量直接赋值给
byte
、short
、char
等类型变量,而不需要进行强制类型转换,只要不超过表示范围。
2 强制类型转换
- 基本语法
byte a = 100;
int b = (int)a;
- 当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。
int x = 300;
byte bx = (byte)x; // 此时,bx的值需要根据内存进行分析,而不是300
3 运算时类型提升
- 做所有的二元运算过程中,都伴随着类型提升问题
- 运算过程中的类型提升,需要先进行类型的转换后再进行运算
测试代码如下:
int a = 1000000000;
int b = 20;
System.out.println((long)a * b); // 此时a提升为long类型,整个表达式就提升了
System.out.println((long)(a * b)); // 此时a*b的整体被提升到long型
运行结果如下:
20000000000
-1474836480
注:当出现以下情况时,最好在表达式开始之初就将类型进行提升(如long_1所示),而不是在结尾处进行类型提升(如long_2所示),防止前半部分计算时已经发生溢出的现象
long_1 = 70L * 60 * 24 * 365;
long_2 = 70 * 60 * 24 * 365L;
网友评论