前言:
这里只讨论七种基本数据类型变量间的运算,不包含boolean类型的。
1.自动类型提升:
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的。
说明:此时的容量大小指的是,表示数的范围大和小。比如long占用八个字节,float占用四个字节,但是float的容量要大于long的容量。
byte、short、char—>int–>long–>float–>double
注意
:当byte、short、char三种类型的变量做运算时,结果为int型
@Test public void test() { int a1 = 3; float a2 = 5.4f; float a3 = a1 + a2; System.out.println(a3); //8.4 byte b1 = 20; short b2 = 12; int b3 = b1 + b2; System.out.println(b3); //32 short c1 = 45; double c2 = c1; System.out.println(c2); //45.0 byte e1 = 45; short e2 = 14; char e3 = 'a'; //编译不通过 // byte e4 = e1+e2; //编译不通过 // short e5 = e1+e3; //编译不通过 // char e6 = e1+e2; char d1 = 'a'; //97 byte d2 = 1; int d3 = d1 + d2; System.out.println(d3); //98 }
2.强制类型转换:
自动类型提升运算的逆运算
- 需要使用强转符()
- 注意点:强制类型转换,可能导致精度损失
代码说明:
@Test public void test1(){ double a1 = 12.3; //精度损失举例1 int a2 = (int)a1; System.out.println(a2);//12 //没有精度损失 long c1 = 100; int c2 = (int)c1; System.out.println(c2); //100 //精度损失举例2 int b1 = 128; byte b2 = (byte) b1; System.out.println(b2);//-128 }
特殊情况,看代码即可:
@Test public void test2(){ long a1= 456; //不报错 //编译失败:过大的整数 // long a2= 4567832423235252; //编译失败 // float b1= 12.6; byte c1 = 12; //整型常量,默认类型为int型 // byte c2=c1+1; //编译失败 //浮点型常量:默认类型为double型 // float d1 = c1+12.3; //编译失败 }