类型的转换
Java是一个强类型编程语言,当不同的类型的变量之间相互赋值的时候,就会出现严格的校验。
1.int和long/double的相互赋值:
int a=20;
long b=12;
a=b;//编译出错,有精度损失
b=a;//编译通过
int a=10;
double b=1.2;
b=a;//编译通过
a=b;//编译出错,有精度损失
总结不同类型之间的赋值,表示范围小的类型可以转换成范围大的类型,反之不能转换(int 可以赋值给long,long不能赋值给int)
2.int与boolean相互转换
int a=12;
boolean b=false;
b=a;//编译出错,不兼容
a=b;//编译出错,不兼容
总结 int与boolean不能相互转换
3.int字面值常量给byte赋值
byte a=100;//编译通过
byte a=129;//编译出错,
结论 int字面值常量给byte赋值时,检查常量是否在byte的数据范围内(-128~127),超出范围会编译出错(129),在范围内则会编译通过(100)。
4.强制类型转换
int a=3;
double b=2.3;
a=(int)b;//编译通过
int a=2;
bollean b=false;
a=(int)b;
结论 使用强制类型转换过程中,可以把比如double long等与 int相关的类型可以转换成int,但是会有精度丢失,比如b=2.3强制类型专换为2,但是互不相干的类型之间无法转换(boolean).
数值提升
1.int 和Long的混合运算
int a=2;
long b=3;
int c=a+b;//编译出错,出现精度丢失
long c=a+b;//编译通过
结论与前面int与long相互转换类似,如果要求转换为int型,可以使用强制类型转换。
2.byte和byte的运算
byte a=3;
byte b=4;
byte c=a+b;
System.out.println(c);//编译出错
byte a=3;
byte b=4;
byte c=(byte)(a+b);
System.out.println(c);
结论:byte与byte是相同类型的,但是仍然会显示编译出错,因为byte与byte运算时,首先会先转换为int类型,得到的结果仍是int,若要转换为byte,可能会出现损失,因此转换需要强制类型转换。
int与String之间的相互转换
//int转换为String
int num=10;
String str1=num+"";//方法1
String str2=String.valueof(num);
//String转换为int
String str="100";
int num=Integer.paraseInt(str);