基本数据类型之间的转换
1 基本数据类型的自动转换
规则
Java 在进行赋值或运算时,精度(容量)小的类型自动转换为精度(容量)大的类型
char` > `int `> `long` > `float` > `double
byte` > `short` > `int `> `long` > `float` > `double
注意事项
1有多种类型数据混合运算时,系统会将所有数据转换成容量最大的那种,再进行运算
int n1 = 10; //ok
float d1 = n1 + 1.1;//错误 n1 + 1.1 => 结果 double
double d1 = n1 + 1.1;//正确 n1 + 1.1 => 结果 double
float d1 = n1 + 1.1F;//正确 1.1F => 结果 float
2 如若把大精度(容量)数据赋值给小精度(容量)类型,就会报错(小数由于精度原 因,大赋小会丢失精度,必不可用。
但整数大赋小时:1.赋予具体数值时,判断范围。
2.变量赋值时,判断类型。反之进行自动类型转换
int n1 = 1.1; // 错误 double转为int
3 byte
short
char
三者不会相互自动转换,但可以计算。计算时首先转化为 int
int n2 = 1; // 正确
byte b1 = 10;
byte b2 = n2; // 错误 int不能转为byte
char c1 = b1; // 错误 byte不能转为char
4 boolean
类型不参与自动转换
boolean pass = true;
int num100 = pass;// 错误 boolean不能转为int
5 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型
byte b4 = 1;
short s3 = 100;
int num200 = 1;
double num300 = 1.1F;
float num500 = b4 + s3 + num200 + num300; // 最大的类型为double,不能赋值给float
2 基本数据类型的强制转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。
使用时加上强制转换符 ( )
,但可能造成精度降低或溢出
注意事项
1 当进行数据从大到小转换时,用强制转换
2 强制转换只能对最近的操作数有效,往往会使用 ( )
提升优先级。
int x = 10*3.5+6*1.5; // 编译错误: double -> int
int x = (int)(10*3.5+6*1.5);// 44.0 -> 44 精度丢失
int m = 100; // ok
char c2 = m; // 错误
char c3 = (char)m; // ok