一、 以Integer为例介绍一下常量池
Integer中有个静态内部类IntegerCache,里面有个cache[],也就是Integer常量池。常量池的大小为一个字节(-128~127)。
1、当赋值在这个区间时,不会创建新的Integer对象,而是从缓存中获取已经建立好的Integer对象;
2、当超出这个范围时,直接new Integer来创建对象。
public static void main(String[] args) {
Integer a1 = 127;
Integer a2 = 127;
Integer b1 = 128;
Integer b2 = 128;
System.out.println(a1 == a2);
System.out.println(b1 == b2);
}
输出:
true
false
正是因为有了常量池的存在,才会出现输出结果不同的情况。
二、 其他包装类的常量池介绍
- Byte、Short、Integer、Long的常量池大小都为-127 ~ 128;
- Float、Double没有常量池;
- Character的常量池大小为0 ~ 127。