内容纲要
51讲自动类型转换--》强制类型转换
重要!!!!!!!
(务必背下来)
public class AutoConvert{
public static void main(String[] args){
//演示自动转换
int num = 'a';
double d1 = 80;
System.out.println(num);//97
System.out.println(d1);//80.0
}
}
自动类型转换细节
重要
-
有多种类型的数据混合运算是,系统首先会将所有数据转换成荣来奶最大的那种数据类型,然后再进行计算
-
当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型是,就会报错,反之就会惊醒自动类型转换
-
(byte、short)和 char 不会自动转换。
-
当把具体数赋给 byte 时,(1)先判断该数是否在 byte 范围内,如果是就可以转换。
(2)如果是变量赋值,则判断类型。
byte b1 = 10; //对, -128,127
char c1 = b1; //错,byte 不能自动转换成 char
int n1 = 1;
byte b2 = n1; //错,如果是变量赋值,则判断类型
public class ConvertDetail{
public static void main(String[] args){
int a = 10;
float b = a + 1.1; /*报错double转换为float会有精度损失(a 是int变量,
1.1是浮点型),所以a + 1.1被自动转换成double型 */
//或者 float b = a + 1.1F; 告诉编译器1.1是float常量
//或者 double b = a + 1.1; 精度不会损失
System.out.println(b);//
}
}
-
byte , short , char 他们三者可以计算,再计算时首先转换为 int
(只要出现以上三者之一在运算,则就会转换为int)
- boolean类型不参与运算
- 自动提升原则:表达式结果的类型自动提升为操作数的最大的类型。
强制类型转换
introduce:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出,格外要注意
public class ForceConvert{
public static void main(String[] args){
int a = (int)1.1; //1
system.out.println(a); //1 ,精度损失
int a2 = 2000;
byte b1 = (byte)a2;
System.out.println(b1); //-48 ,数据溢出
}
}
基本数据类型转换
-
强转符号只针对最近的操作数有效,往往会使用小括号提升优先级
-
int x = (int)10*3.5 + 6*1.5; //编译报错: double --> int int x = (int)(10*3.5 + 6*1.5); //44.0
-
char 类型可以保存 int 的常量值,但不能保存 int 的变量值, (需要强转)
-
byte 和 short, char 类型在进行运算时,当作 int 类型处理。