今天又重新学习到了java基础。
先说java的数据类型:
(1)基本数据类型
byte 1字节
short 2字节
int 4字节
long 8字节
float 4字节
double 8字节
char 2字节
boolean 1字节
涉及转换、float和double只能用于存储,不能计算。
因为float和double精度,BigDecimal用于计算,要用字符串形式(add方法)。
关于后缀:
我们知道Java在变量赋值的时候,其中float、double、long数据类型变量,需要在赋值直接量后面分别添加f或F、d或D、l或L尾缀来说明。
其中,long类型最好以大写L来添加尾缀,因为小写l容易和数字1混淆。
long lNum = 1234L;
float fNum = 1.23f;
double dNum = 1.23d;
加还是不加?Java语言中,整数直接量,JVM虚拟机是默认为int类型数据的。所以,当整数直接量赋给long、float或者double,而不添加尾缀,虚拟机也会直接将int类型数据自动转换为对应类型然后赋值。因为数据长度短的转换为长的并不会造成数据丢失,所以默认可以自动转换。
long INum = 8; //不报错,int自动转换为long类型,不会报错
float FNum = 7; //不报错,int自动转换为float类型,不会报错
double DNum = 10; //同上
但是,当浮点直接量,JVM虚拟机默认为double类型,如果直接赋值给float就会引起编译器报错。
float FNum = 1.2; //报错,因为1.2虚拟机是默认为double类型,不能直接赋值给float类型变量
float FNew = 1.3f;//正确,因为尾缀添加了f,即告诉了虚拟机1.3属于float类型变量
这样的情况:
long lNum = 1.2L; //错误,double类型数据不能直接赋值给long类型
long lNew = (long)1.2; //正确,double类型数据强制转换为long类型
所以,总的来说,要看定义的类型和赋给的值大小有没有冲突,赋给的值要是比定义的大,要进行强制类型转换,否则报错。
这里呢,我备注一下,就是float类型和double类型的计数方式不一样。要知道
(2)引用数据类型(只有引用类型有null)
引用数据类型,涉及到JVM内存模型,这里先不说