byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。封装类Byte
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。封装类Short
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。 封装类 Integer
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。 封装类 Long
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。 封装类Float
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。封装类Double
boolean:只有true和false两个取值。 封装类Boolean
char:16位,存储Unicode码,用单引号赋值。封装类 Character
以上是java的八大基本数据类型,由于平时某些数据类型不总经常使用所以我们再定义或进行赋值于非赋值运算时出现一些问题。
首先是定义基本数据类型
我们可以看到除了float其余的七个基本数据类型都是可以直接定义的,而float必须再数值后加f,或者进行强制类型的转换
这是因为我们java默认类型为 int 和double (double 后面的D 加不加没有区别)。
对于byte/short/char 如果没有超出范围 三种数据类型我们javac编译器会自动进行强制类型转换如图一内容(byte)(short) (char) 。(自动进行 所以我们看不到 ,必须再类型的范围之内)
对于long来说,小的数据类型会自动向大的数据类型进行转换 .再int 范围内不加L默认是 int ,加后为long
但是对于float 来说 默认double的范围大于 float 无法进行从大变小的自动类型转换。所以要加上f,或者进行强制类型转换。
那么对于非赋值运算呢?
我们可以看到 无论 byte short char 三种谁与谁相加结果都是int型
这是因为 byte short char 但是计算之前会自动转换成int
从以上结果我们能总结出当两个数相加是其中的一个数会转换成另一个数的数据类型,从以上的规律的得出他们的转换关系为
byte/char/short->int->long->float->double
比如操作数之一为double,则另一个操作数先被转化为double,再参与算术运算。
总结:
非赋值运算,自动转换规则 byte/char/short->int->long->float->double 赋值运算 转换规则 精度大的值不可以 直接付给精度小的值
*强制类型转换可能会损失精度