目录
基本数据类型变量间的运算规则
可以做运算的基本数据类型有7种,分别为byte、short、int、long、float、double和char,不包含boolean类型。
1.自动类型提升
规则:当容量小的变量与容量大的变量做运算时,结果自动转换为容量大的数据类型。
byte 、short 、 char ---> int ---> long --->float ----> double
说明:此时的容量小或大,并非指占用的内存空间大小,而是指表示数据的范围的大小。
1.1赋值运算中的类型转换
public static void main(String[] args) {
byte b = 1000; //编译不通过,整数常量不能超过其类型的范围 byte类型范围(-128~127)
short s = 852; //short类型范围(-32768~32767)
//把整数类型即int类型值赋值给byte,short,char类型变量,属于自动类型提升的特例,不能超出其类型的范围
int i = 7896;
long l1 = 123L;
long l = 123; //理解为自动类型提升
long l2 = 123123123123;//错误,123123123123123理解为int类型,超出了int范围,所以错误。
long l3 = 123123123123L;此时的123123123123就是使用8个字节存储的long类型的值
float f = 741;
float f1 = 12.3F;
float f2 = 12.3;//编译不通过,不满足自动类型提升的规则(double--->float)
double d = 7965;
//将int类型值赋给long,float,double类型,符合容量小的变量自动转换为容量大的数据类型的规则。
}
1.2算数运算中的类型转换
情况1:如果是byte、short、char类型的做运算,结果为int类型;
情况2:整型常量,结果是int类型;
情况3:浮点型常量,结果是double类型
public static void main(String[] args) {
//情况1:如果是byte、short类型的做运算,结果为int类型;
byte b1 = 23;
int i1 = 12;
int i2 = b1 + i1;
byte b2 = b1 + i1;//编译不通过
short s1 = 10;
short s2 = s1 + b1;//编译不通过
i2 = s1 + b1;
byte b2 = 25;
byte b3 = b1 + b2;//编译不通过
char c1 = 'a';
char c2 = c1 + b1; //编译不通过
int i3 = c1 + b1;
//情况2:整型常量,结果是int类型;
byte b3 = 10;
int i4 = b3 + 1;
//情况3:浮点型常量,结果是double类型
double d1 = b3 + 25.5;
}
2.强制类型转换
可以理解为自动类型提升的逆运算。
规则:
1.如果需要将容量大的变量的类型转换为容量小的变量的类型,需要使用强制类型转换。
2.强制类型转换需要使用强制符:()。在()内指明要转换为的数据类型。
3.强制类型转换过程中可能导致精度损失。
public static void main(String[] args) {
double d1 = 12;//自动类型提升
int i1 = (int) d1;
System.out.println(i1);//输出:12
long l1 = 123;
short s1 = (short) l1;
System.out.println(s1);//输出:123
//精度损失例子:
double d2 = 12.3;
int i2 = (int) d2;
System.out.println(i2); //输出:12 截断
int i3 = 128;
byte b1 = (byte) i3;
System.out.println(b1);//输出:-128 原反补移
}