自动类型转换(小转大)
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型,如下图所示,红色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的丢失
可以将整型常量直接赋值给 byte,short,char 等类型变量,而不需要强制转换,只要保证不超出其表数范围即可
public class Test {
public static void main(String[] args) {
short a = 12;// 合法
short b = 1234567; // 非法, 编译无法通过, 因为已经超出了表数范围
}
}
强制类型转换
强制类型转换,又称为造型,用于显示的转换一个数值的类型,在有可能丢失信息的情况下进行的转换时通过造型来完成的,但可能造成精度降低或溢出
语法格式:(type)var
运算符 “()” 中的 type 表示将值 var 想要转换成的目标数据类型
public class Test {
public static void main(String[] args) {
double x = 3.14;
int ix = (int)x; // 被转化为 3, 降低了精度
char a = 'a';
int b = a + 1; // 转换成 int 型, 整型, 那么 a = 97, b = 98
char cb = (char)b; // 转换成 char 型, cb = b
}
}
注意:在转换过程中要注意溢出的问题, 如下示例
public class Test {
public static void main(String[] args) {
int a = 1000,000,000; // 10 亿
int b = 20;
int c = a * b; // 这里得到的结果已经超出了 int 的表数范围, 最终结果 c = -1474836480; 得不到准确的值
}
}