一、Java数据类型分为基本数据类型与引用数据类型。
二、基本数据类型
★ 四种整数类型(byte、short、int、long)
1、byte:1个字节,8 位 默认值为0
2、short:2个字节,16 位 默认值为0
3、int:4个字节,32 位 默认值为0
4、long:8个字节,64 位 默认值为0L 【整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L或 l】
★ 两种浮点数类型(float、double)
1、float:4个字节,32 位 【后缀 F 或 f】 默认值为0.0F
2、double:8个字节,16 位 【后缀 D 或 d】 默认值为0.0D
★ 一种字符类型(char):用于存储单个字符,内存中占2个字节,16位,默认值为\u0000。
★ 一种布尔类型(boolean):占1个字节,8位,用于判断真或假(仅有两个值,即true、false),默认值false
三、基本数据和包装类的区别
● 包装类可以为NULL,默认值为null,基本数据不可以;
● 包装类是对象,有方法,比如:toString(), valueOf(), hashCode()等
四、基本数据类型线程安全问题
1、在java中,除了long和double的8个字节、64位的变量外,其他的基本变量都是原子性的。
2、java存储模型要求获取和存储操作都为原子性,但是对于非volatile的long和double变量,jvm允许将64位的读或写划分为两个32位的操作。
如果读和写发生在不同的线程 ,就会出现线程安全问题
3、在多线程的情况下,就算除去long和double的其它变量是原子性的,也有可能会出现线程安全的问题,这个是线程可见性的问题,
所以需要加上volatile声明才行,volatile修饰符是强制变量每次从内存中读取。