1.为什么要进行数据类型的转换?
不同的类型的数据在一起运算,Java认为类型最终必须要形成统一,所以类型与类型之间需要装换的。
2.数据类型转换有三种:
自动类型转换。
强制类型转换。
表达式中的自动类型提升。
3.自动类型装换
自定义类型转换的总规则:小范围的数据或者变量可以自动的赋值给大范围类型的变量。
数据类型的范围由小到大:byte short int long float double
/
char
char类型的变量可以直接自动转换给int类型的变量。
public class DataConvertDemo01 {
//定义一个程序的入口方法,可以自动执行的
public static void main(String[] args) {
//1.小的数据类型给变量是可以自动进行的。自动数据类型转换。
byte b = 127;
byte b1 = 27;
//byte b2 = 128;//不行,128超过了byte的范围
//2.小范围的变量可以自动的赋值给大范围的变量。也是自动类型转换
byte age = 23;
int it = age;
System.out.println(age);
System.out.println(it);
//小范围的变量可以自动的赋值给大范围的变量。也是自动类型装换。
long lg = 32113131;
float ft = lg;
System.out.println(ft);
//小范围的变量可以自动的赋值给大范围的变量。也是自动类型转换。
//浮点型运算可能出现数据失真,暂时都用double。
float ft1 = 12.32f;
double db = ft1;
System.out.println(db);
}
}
小结:
1.小的数据在变量的范围之内是可以自动赋值给该变量的。
2.小范围的变量可以自动的赋值给大范围的变量。
4.强制类型装换
例子:
byte i = 200;//错误
byte类型的范围是-127到128之间,200已经超过了byte类型变量可以存储的数据范围大小。想要赋值成功,只有同过强制类型转换,将int类型的200进行强制转换成byte类型才能赋值。
4.1强制装换总规则
大的数据或者大范围的变量复制给小范围的变量,必须程序员手工进行强制转换,否则代码出错!!
4.2强制类型转换的格式:
数据类型 变量 = (数据类型)数据或者变量。
public class DataConvertDemo02 {
public static void main(String[] args) {
//byte b = 200;//必须强制转换否则报错
//进行强制类型转换,代码就不会出错,但是数据可能失真!!
byte b = (byte)206;
System.out.println(b);
//大范围类型的变量赋值给小范围类型的变量,也必须进行手工强制转换。
int age = 23;
byte b1 = (byte)age;
System.out.println(b1);
//浮点转成整数,直接截断小数点,保留整数部分,可能造成损失精度
double db =23.98;
int it = (int)db;
System.out.println(int);//23
}
}
小结:
1.大的数据赋值给小范围的变量必须程序员手工进行强制装换。
2.大范围类型的变量赋值给小范围类型的变量,也必须进行手工强制类型转换。
3.浮点型转成整形,直接截断小数点,保留整数部分,可能造成数据损失精度。
4.强制类型转换可能会出现数据失真。
5. 表达式的自动类型提升
常量与常量等在参与运算的时候,是会进行特殊的自动类型提升的。
byte ,short , char -> int ->long -> float ->double
5.1表达式的自动类型提升总规则:
在表达式运算中byte, short,char类型的变量会直接自动转型成int类型来参与运算。
表达式的最终结果类型由表达式的最高类型决定的,最高类型是什么,表达式的最终结果类型就是什么。
public class DataConvertDemo03 {
public static void main(String[] args) {
//表达式的最终结果类型由表达式的最高类型决定的,最高类型是什么,表达式的最终结果类型就是什么类型。
byte b = 10;
short st = 100;
int it = 1000;
//结果是int
int rs = b * st + it;
System.out.println(rs);
// 面试题
// 2.在表达式中运算,byte , short ,
// char类型的变量会直接自动转型成int类型来参与运算。
byte b1 = 100;
byte b2 = 20;
int rs1 = b1 + b2;
System.out.println(rs1);//结果类型是int
byte bb1 = 10;
byte bb2 = 10;
double rs2 = bb1 + bb2 +1.0;
System.out.println(rs2);//结果类型是double
}
}
小结:
1.在表达式中参与运算,有特殊转型。
byte , short , char 是直接转换成int参与运算的。
2.表达式的最终结果类型由表达式的最高类型决定的,最高类型是什么,表达式的最终结果类型就是什么