基本数据类型
March 20, 2023About 1 min
基本数据类型
Java 中有 8 种基本数据类型,分别为:
- 6 种数字类型:
- 4 种整数型:
byte
、short
、int
、long
- 2 种浮点型:
float
、double
- 4 种整数型:
- 1 种字符类型:
char
- 1 种布尔型:
boolean
间的大小如下:
基本类型 | 位数 | 字节 | 默认值 |
---|---|---|---|
int | 32 | 4 | 0 |
short | 16 | 2 | 0 |
long | 64 | 8 | 0L |
byte | 8 | 1 | 0 |
char | 16 | 2 | 'u0000' |
float | 32 | 4 | 0f |
double | 64 | 8 | 0d |
boolean | 1 | false |
数字精度
浮点数丢精
浮点数的存储采用IEEE754协议
0.1不能被精确表达
0.1+0.2不等于0.3,是0.300000000000004
解决方法
(0.1*10+0.2*10)/10
- BigDecimal
大整数存储
包装类型
常量池技术/缓存机制
Byte
,Short
,Integer
,Long
这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,
Character
创建了数值在 [0,127] 范围的缓存数据
Boolean
包装了 TRUE 和 FALSE 两个对象。直接返回 True
or False
。
两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。
记住:所有整型包装类对象之间值的比较,全部使用 equals 方法比较。
自动拆装箱
从字节码中,我们发现装箱其实就是调用了 包装类的valueOf()
方法,拆箱其实就是调用了 xxxValue()
方法。
由于可能是null对象,所以自动拆箱的时候可能产生NPE。
三目运算符使用不当会导致诡异的 NPE 异常:
public class Main {
public static void main(String[] args) {
Integer i = null;
Boolean flag = false;
System.out.println(flag ? 0 : i);
}
}