基本数据类型之间的运算规则
前提:这里只讨论7种数据类型(boolean不在讨论范围内)
文章目录
一、自动类型提升
当容量小的数据类型的变量和容量大的数据类型的变量做运算的时候,结果自动提升为容量大的或者容量更大的数据类型
byte、char、short、int->long->float->double
说明:此处的容量大小仅指数的大小和范围,并不是数据类型所占字节的大小
例1:
byte b1 = 123;
int i1 = 1234;
byte i2 = b1 + i1;
System.out.println(i2);
编译不通过

例2:
byte b1 = 123;
int i1 = 1234;
int i2 = b1 + i1;
System.out.println(i2);
编译通过

特别的:当byte、char、short这三个数据类型一起运算时,变量的数据类型应该为int及其以上(包括它们三个自己和自己运算)
例3:
byte b = 5;
short s = 3;
short t = s + b;
System.out.println(t);
编译不通过

例4:
char c1 = 'a';//a为97
byte b2 = 123;
int i3 = c1 + b2;
System.out.println(i3);
float f2 = c1 + b2;
System.out.println(f2);
编译通过

二、强制类型转换
其实就是自动类型提升的一种逆运算
需要使用强转符()
例5:
long l1 = 125l;
short s2 ;
s2 = (short)l1;
System.out.println(s2);
编译通过

有可能会导致精度损失
例6:
double d2 = 123.4;
int i4 ;
i4 = (int)d2;
System.out.println(i4);
编译通过,但是损失了精度

本文探讨了Java中基本数据类型的运算规则,包括自动类型提升和强制类型转换。当小容量数据类型与大容量数据类型运算时,结果会提升到大容量类型。在涉及byte、char、short的运算时,结果至少提升至int。强制类型转换可能导致精度损失。例如,将double转换为int会丢失精度。了解这些规则对于避免编译错误和理解数值计算至关重要。
1611





