八大基本数据类型:
- byte:占8位(1个字节)取值范围是-2七次方到2的七次方-1
- short:占16位(2个字节)取值范围是-2的十五次方到2的十五次方-1
- int :32位(4个字节)取值范围是-2的三十一次方到2的三十一次方-1
- Long:64位(8个字节)取值范围是-2的63次方到2的63次方-1
- float:32位(4个字节)单精度浮点数
- double:64位(8个字节)双精度浮点数
- char:字符型
- Boolean:true和false
默认类型:
在Java中,整数类型(byte/short/int/long)中,对于未声明数据类型的整形,其默认类型为int型。
在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型。
自动类型转换:
当将一个数值范围小的类型赋给一个数值范围大的数值型变量,
jvm在编译过程中俊将此数值的类型进行了自动提升。
比如(byte—short—int—lang)的时候,会自动类提升,就是
在数值类型的自动类型提升过程中,数值精度至少不应该降低
(整型保持不变,float->double精度将变高)。
自动类型转换也叫隐士类型转换,在赋值的时候,Java会默认把整形类型看成是int类型的数,由于int类型比byte类型的取值范围要广泛,所以需要在byte类型的取值范围只能才能成功赋值,否则必须使用强制类型转换,不然将报错。其他的也一样,当给long类型赋值的时候,由于long类型的取值范围比int类型范围要大,所以当赋值的值大于int的取值范围的时候可以在后面加上一个L表示这是一个long类型的数
强制类型转换
大范围大的类型转为范围小的类型时候,就需要强制类型转换
还有就是当给byte赋值的时候,赋值的值大于了byte的取值范围,就可以使用强制类型转换,注意:强制类型转换可能会造成精度缺失的问题,
表达式类型自动提升
当两个byte类型的变量在运算期间类型会自动提升为int类型在进行转换,所以要在运算完成后早用强制转换为byte类型,当两个int类型进行运算时,只能得到int类型,和浮点数进行运算得到的就是浮点数,最后结果的类型是会根据精度高的来。