1. 基础数据类型
类型 | 占用存储空间 | 表数范围 | 包装类 | 包装类缓存对象 |
---|---|---|---|---|
byte | 1字节=8bit | -128~127 | Byte | -128~127 |
short | 2字节 | -215~215-1 | Short | -128~127 |
int | 4字节 | -231~231-1(约21亿) | Integer | -128~127 |
long | 8字节 | -263~263-1 | Long | -128~127 |
单精度float | 4字节 | -3.403E38 ~ 3.403E38 | Float | 没有 |
双精度double | 8字节 | -1.798E308 ~ 1.798E308 | Double | 没有 |
char | 2字节 | Character | 0~127 | |
boolean | Boolean | true和false |
对于boolean类型的占用存储空间,
如果boolean是单独使用:boolean占4个字节。
boolean在底层实际会调用int,那么既然int占4个字节,boolean也自然占4个字节。即,boolean类型占4个字节。细节:true: 1 false: 0
如果boolean是以“boolean数组”的形式使用:boolean占1个字节。
2. 包装类的缓存机制
包装类是对Java中基本类型的封装,在 JDK5 中引入了包装类的缓存机制,有助于节省内存。实现方式是在类初始化的时,提前创建好会频繁使用的包装类对象,当需要使用某个类的包装类对象时,如果该对象包装的值在缓存的范围内,就返回缓存的对象,否则就创建新的对象并返回。
使用构造函数创建对象时不使用缓存,例如:Integer a = new Integer(123);
使用包装类时,推荐使用valueOf()
方法,少使用parseXXX()
方法
因为 Integer、Long 这种包装类有缓存机制,valueOf 方法会从缓存中取值,如果命中缓存,会减少资源的开销,parseXXX 方法没有这个机制。
3. 三元运算符与if判断的不同点
Object o1 = true ? new Integer(1) : new Double(2.0);System.out.println(o1); // 1.0