1.自动类型转换
容量小的数据类型自动转换成容量大的数据类型。
数据类型按从小到大排序为:
byte->short/char->int->long->float->double
其中,byte占1个字节,8位;char和short占两个字节,16位;int和float占4个字节,32位;long占8个字节,64位;double占16字节,128位。
由于计算机存储的是有符号补码,所以int能表示的最大值为2^32-1,最小值为 2^32。
需要注意: 1.虽然long型字节数大于float,但是容量却是远小于float的。这是因为每一位代表的含义不同。2.如果没有声明,java默认整型数值为int型,浮点型数值为double型。
自动类型转换图如下所示
char、byte、short之间是不可以相互转换的
boolean不能和其他类型转换
2.强制类型转换
将容量大的数据类型转换为容量小的数据类型使用时要加上强制转换符 :() ,但可能造成精度降低或溢出
3.典型情况
1.因为类型不匹配带来的报错
short s1 = 1;
s1 = s1 + 1;(报错)
java的整型默认为int,s1是short。第二行代码左为short,右为int。从右向左赋值时出错。
解决办法:使用+=运算符,或者对右边进行强制类型转换
//方式1
short s1 = 1;
s1 += 1;
//方式2
short s2 = 1;
s2 = (short)(s2 + 1);
2.在计算过程中的类型提升
System.out.println(-5 + 1/4 + 2*-3 + 5.0);//答案是-6.0
在数值5.0之前,按照int类型计算。答案是 -11+5.0=-6.0
System.out.println(-5+ 1.0/4.0+ 2*-3+ 5.0);//答案是-5.75
在1.0/4.0时,运算转为double类型。答案是-10.75+5.0=-5.75