/*
基本数据类型之间的运算规则
只讨论7种基本数据类型变量之间的运算,不包含boolean类型
1,自动类型提升
当容量小的数据类型变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
此时的容量大小指的是表示数的范围大小,不是占用字节的大小,比如float(4个字节) 的容量大于long(8个字节)的容量
byte–>short–>int–>long–>float–>double
byte,char,short–>int–>long–>float–>double
byte,char,short三个互相做运算时输出都是int或更大的类型
2,强制类型转换
是自动类型提升运算的逆运算
1, 需要使用强转符号()例如long l1 = 112.9L;short s1 = (short)l1; 输出为112,只取整数部分。
2,使用强制类型转换,可能会出现精度损失。
注意
1,编码情况
long 1 = 122;也可以编译通过,会默认为int类型
long l2 = 12345673333;编译不通过,超出int范围,需要末尾加L,
float f1 = 12.3;编译失败,必须加F,因为默认为double类型。
2,编码情况2
byte b = 12;
byte b1 = b + 1;编译失败,数字1为整数型常量,默认为int型,小数型默认为double
*/
class VariableTest2{
public static void main(String[] args) {
byte b1 = 2;
int i1 = 1278;
//byte b2 = b1 + i1
//编译不通过,因为int范围大
int i2 = b1 + i1;
long l1 = b1 +i1;
System.out.println(i2);
System.out.println(l1);
float f1 = b1 + i1; //整数型数值运算结果可以定义为浮点型,系统输出自动加小数点
System.out.println(f1);
short s1 = 123;
double d1 = s1;//可以将整数型直接转换为浮点型,后面自动加小数点
System.out.println(d1);
char c1 = 'a';// a 对应的数值为97
int i3 = 10;
int i4 = c1 + i3;//char只能容纳一个字符,所以i4不能为char类型
System.out.println(i4);
}
}
class VariableTest3{
public static void main(String[] args) {
long l1=123L;//数值没有超出long范围可以不加L,也能编译,会自动转换为int类型
short s1 = (short)l1;//数值没有超出short范围,强制转换后精度没有损失。
System.out.println(s1);
double d1 = 12.9;
int i1 = (int)d1;//执行截断操作,结果只取整数部分,不是四舍五入
System.out.println(i1);//输出12,损失小数点,精度损失
int i2 = 128;
byte b1 = (byte)i2;
System.out.println(b1);//输出-128跟二进制规则有关,损失精度。
long l2=128456744453453L;
int i3 = (int)l2;
System.out.println(i3);
short s2 = (short)l2;
System.out.println(s2);
byte b2 = (byte)l2;
System.out.println(b2);
}
}