基本数据类型变量运算规则
-
可进行基本数据类型变量间的运算规则的基本数据类型有7种,不包含boolean类型
-
运算规则包括
- 自动类型提升
- 强制类型转换
自动类型提升
规则: 容量小的变量与容量大的变量进行运算时,自动转换为容量大的数据类型
说明:
- 容量指变量表示的数据范围的大小,并非指其占用内存的大小
- byte、short、char ===> int ===> long ===> float ===> double
- byte、short、char类型变量之间两两做运算,其结果均为int类型
class VariableTest3{
public static void main(String[] args) {
int i1=10;
long l1=i1;
float f1=l1;
byte b1=12;
int i2=b1+i1;
//错误: 不兼容的类型: 从int转换到byte可能会有损失
//byte b2=b1+i1;
//特殊部分1
byte b3=12;
short s1=10;
//错误: 不兼容的类型: 从int转换到short可能会有损失
// short s2=s1+b3;
int i3=b3+s1;
//特殊部分2
char c1='s';
//错误: 不兼容的类型: 从int转换到char可能会有损失
// char c2=c1+b3;
int i4=c1+b3;
}
}
练习
//练习1
long l2=123L;
// 自动类型提升
long l3=123;
// 错误: 整数太大,此时该变量理解为int类型
// long l4=123123123123;
long l5=123123123123L;
//练习2
float f2=12.3f;
//错误: 不兼容的类型: 从double转换到float可能会有损失
// float f3=12.3;
// 练习3
byte b4=10;
//错误: 不兼容的类型: 从int转换到byte可能会有损失
//byte b5=b4+1;
int i5=b4+1;
//错误: 不兼容的类型: 从double转换到float可能会有损失
//float f3=b4+12.3;
double d1=b4+12.3;
//练习4
//错误: 不是语句
long 123l=12;
long l6=123l;
规定:
- 整型常量为int类型
- 浮点型常量规定为double类型
- 变量名不能以数字开头为了其内部规则“自洽”,不产生冲突
强制类型转换
规则: 将取值范围大(或容量大)的类型强制转换为取值小(或容量小)的类型
- 自动类型提升是Java自动执行的,强制类型转换需程序员手动执行
- 强制类型转换需要使用强转符
()
,在()
内指明想要转换的目标数据类型 - 强制类型转换过程中可能导致精度损失问题
转换格式:
变量类型 变量名=(变量类型)进行变量转换的变量名或变量值;
强制转换
double d1=12;
//错误: 不兼容的类型: 从double转换到int可能会有损失
//int i1=d1;
int i1=(int)d1;
System.out.println(i1);
// 结果:12
long l1=123;
short s1=(short)l1;
System.out.println(s1);
// 结果:123
int i2=12;
float f1=i2;
System.out.println(f1);
// 结果:12.0
// 编译通过,一般()省略
float f2=(float)i2;
精度损失
double d2=12.99;
int i3=(int)d2;
System.out.println(i3);
// 结果:12
int i4=128;
byte b1=(byte)i4;
System.out.println(b1);
// 结果:-128