数据类型转换
基本数据类型之间的运算规则
前提:只是7中基本数据类型的运算,不包含boolean类型。
容量指的是表示数的范围大小,不是占用内存空间的大和小。
class VariableTest2{ public static void main(String[] args){ byte b1 = 2; int i1 = 129; byte b2 = b1+i1; } }
编译不通过超出byte的范围
class VariableTest2{ public static void main(String[] args){ byte b1 = 2; int i1 = 129; int i2 = b1+i1; System.out.println(i2); } }
编译通过
class VariableTest2{ public static void main(String[] args){ byte b1 = 2; int i1 = 129; long l1 = b1+i1; float f1 = b1+i1; System.out.println(l1); System.out.println(f1); } }
可以用比int大的接收,用浮点型接收会在整数后补个.0
public class A1 { public static void main(String[] args) { char c1 = 'a'; int i3 = 10; int i4 = c1 + i3; System.out.println(i4); } }
char会把字母的ascii码值用来计算
说明char类型的数据和short类型数据做运算时,数据结果为int类型(因为从int转换到short可能会有损失)
说明char类型的数据和byte类型数据做运算时,数据结果为int类型(因为从int转换到byte可能会有损失)
说明byte类型的数据和short类型数据做运算时,数据结果为int类型(因为从int转换到short可能会有损失)
说明同类型之间做运算,数据结果类型为int类型(因为从int转换到short可能会有损失)
结论:char、byte、short运算时结果为int类型,同类型相互做运算也是int类型。(原因Java在做运算的时候,操作数都在int范围内,一律在int空间内运算)
强制类型转换
不能直接赋值
使用强制类型转换
截断操作:只截取相应的位数。会损失精度
数值不超过强转类型的范围,这样才不会精度损失
精度损失
也可以这样但是没必要
两个特殊情况
整数常量默认为int类型,相当于自动类型提升
编译失败:过大的整数。(整数常量默认为int类型)
加上L之后才会被认为是一个long行的变量
浮点型常量默认为double类型,因为double的容量比float大没有强制类型转换符(),所以会编译失败。
这样写不好①麻烦②操作复杂
一开始会认为12.3是个double类型
加上float再把前面的砍掉
如果加上f
上来只有这么长
整数常量默认为int类型
浮点型常量默认为double类型
今天比昨天晚,却比明天早