基本数据类型转换概述
1.1为什么需要数据类型转换???
因为java是强类型语言,所以要求执行“赋值运算”和“算数运算”的
时候,参与运算的数据类型必须保持一致。
1.2基本数据类型转换的方式有哪些???
a)隐式类型转换,无需程序员手动处理
b)强制类型转换,需要程序员手动处理
1.3那么基本数据类型可以相互转换???
除了boolean类型之外,其余的数据类型在内存中存储的都是数值。
所以,除了boolean类型之外,其余的数据类型都可以相互转换。
2.隐式类型转换
原则:从低字节向高字节转换(提升)。
byte --> short --> int --> long --> float --> double
char --> int
赋值运算:从低字节向高字节转换(提升)。
特例:把int类型常量赋值给byte、short和char类型的变量时,
属于自动类型转换的特例,只需不超出其表数范围即可。
条件:a)int类型常量
b)不超出其表数范围
算数运算:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
常见面试题:
1、byte b1 = 11; byte b2 = 12;byte sum = b1 + b2; 错误
原因:两个byte类型运算之后的结果为int类型
和int num1 = 100; int num2 = 300; int sum = num1 + num2;
如何确定以上代码是对的???
a)检查语法是否正确,编译
b)检查逻辑是否正确,解释执行,运行时
哪一个正确呢?
2、请问说出100000L*100000*100000 正确
和100000*100000*100000 // 错误
的区别?
3、int num1 = 90000; int num2 = 90000; int total = num1 * num2;
请问total的结果是多少?
不知道,因为81亿已经超出了int类型的表数范围,返回的结果是一个无意义的数
3.强制类型转换
*/
public class DataTypeDemo03 {
public static void main(String[] args) {
/*
long num = 100000*100000*100000L;
System.out.println(num);
*/
/*
int num1 = 100000;
int num2 = 300000;
// num1 * num2的结果超出了int类型的表数范围。
int sum = num1 * num2;
// num1 * num2 结果是:300,0000,0000
// 30000000000的二进制如下:
// 11011111100001000111010110000000000
// 1111-1100 0010-0011 1010-1100 0000-0000,代表负数
// -64771072的二进制如下:
// 1111-1100 0010-0011 1010-1100 0000-0000
System.out.println(sum);
*/
/*
byte num1 = 10;
short num2 = 20;
int sum = num1 + num2;
*/
/*
int num1 = 10;
long num2 = 20;
// num1属于int类型,num2属于long
long sum = num1 + num2;
System.out.println(sum);
*/
/*
// 等号左边byte类型,等号右边为int类型
final long a = 10;
byte num = a;
System.out.println(num);
*/
/*
byte num1 = 10;
int num2 = num1; // num1从byte类型提升为了int类型
System.out.println(num2);
float f = 100L; // 100L从long类型转换为float类型
System.out.println(f);
*/
}
}