JAVA基本类型转换(第2节)
基本类型转换有一下要点:
- 多个类型参与运算时,整型、浮点型、字符型都可以参与运算,唯独布尔类型不能参与运算
- 在类型转换时,涉及到类型级别,详细如下:级别从低到高:byte,short,char-->int-->long-->float-->double
- 类型级别的作用:当一个表达式中存在多个类型时,都自动转换为表达式中级别最高的那个类型进行计算
- 在进行赋值运算的时候:类型级别也有用处,详细如下:
- 如左边类型级别=右边类型级别,则直接赋值
- 如左边类型级别>右边类型级别,则直接自动转换
- 如左边类型级别<右边类型级别,则需要做强制类型转换
- 强制类型转换是数据"失真“,举例如下”
double d1 = 6; System.out.println(d1);// 6.0 int i1 = (int) 3.14; System.out.println(i1);// 3 // double d2 = 3+3.14F+3.14159+'a'+true;// 报错 double d3 = 30+3.14F+3.14159+'a';// 左边类型级别=右边类型级别,则直接赋值 int i2 = (int) (30+3.14F+3.14159+'a');// 左边类型级别<右边类型级别,则需要做强制类型转换 float f1 = 30+3.14F+'a';// 左边类型级别=右边类型级别,则直接赋值 double d4 = 30+3.14F+'a';// 左边类型级别=右边类型级别,则直接赋值 System.out.println(30+3.14F+3.14159+'a');// 133.28158938964845 System.out.println(d3);// 133.28158938964845 System.out.println(i2);// 133 System.out.println(30+3.14F+'a');//130.14 System.out.println(f1);// 130.14 System.out.println(d4);// 130.13999938964844 //强制类型转换是数据失真 byte b1 = (byte) 258; System.out.println(b1);// 2 // 解答:十进制258放在内存中存储情况如下,(258为整型,没指定类型,默认为int类型,占4个字节,一个字节8个内存位) // 00000000 00000000 00000001 00000010 // 强转为byte类型后,内存分布如下:(byte类型占1个字节,直接砍掉左侧三个字节) // 00000010 // 00000010转换为十进制为数字2