java中,在进行数值运算或赋值时,可能会进行自动类型转换。
首先自动类型转换都需要满足这个条件:
转换后的数据类型的表示范围比转换前的类型大。
解释:
如下图:
自动类型转换只能顺着箭头的方向转,如果要反着转的话,就需要强制类型转换了。
那么在什么情况下会触发自动类型转换呢?
1.在两个数字相加时或者为一个变量赋值时。
相加时分两种情况:
a. int左侧的数值进行计算,会先都转成int,然后进行计算,所以运算结果都是int。
这是java为了防止溢出做的一个处理。
如: byte a,b = 1,c = 1;
char d = 1;
int result;
a = b+c;//编译报错
a = b + d;//编译报错
a = 1 +2; //不会编译报错. 因为1和2是常量,已经识别他们的结果不会溢出,所以不会被自动转成int.
a = 1 +127; //编译报错,因为结果128已经超出了
result = b + c;
result = b + d;
b.int以及int右侧在进行计算的时候,会转成计算的两个数中的在上图里更靠右的类型。
2.赋值的时候
整数:会根据整数大小来判断。比如如果小于128,就算成byte,如果是赋值给更大的类型的话,就会自动向上转型。
小数:默认是double,不会再发生向上转型
如果是123l 则认为是long ,如果是123.1f则认为是float.