说起Java的常量池,我脑海中第一个闪现的就是String的常量池,这个可以说是面试基本必问的知识点,其实我还不知道JVM的常量池中不仅仅就只是String的,还有对象的以及八种基本类型的包装类,除了两种浮点类型的包装类没有实现外,其他的都实现了,下面我们说一说Integer这个int的包装类。
public static void main(String[] args) {
Integer integer1 = new Integer(1);
Integer integer2 = new Integer(1);
System.out.println("初始化后两个数据的对比情况:"+(integer1 == integer2));
integer1 = 2;
integer2 = 2;
System.out.println("把两个数据分别赋值为小于128后的对比情况:"+(integer1 == integer2));
Integer integer11 = new Integer(2);
Integer integer21 = new Integer(2);
System.out.println("把两个数据分别初始化为小于128后的对比情况:"+(integer11 == integer21));
integer1 = 200;
integer2 = 200;
System.out.println("把两个数据分别赋值为大于128后的对比情况:"+(integer1 == integer2));
Integer integer12 = new Integer(200);
Integer integer22 = new Integer(200);
System.out.println("把两个数据分别初始化为大于128后的对比情况:"+(integer12 == integer22));
}
下面是运行的结果,不知道有没有都答对啊!
初始化后两个数据的对比情况:false
把两个数据分别赋值为小于128后的对比情况:true
把两个数据分别初始化为小于128后的对比情况:false
把两个数据分别赋值为大于128后的对比情况:false
把两个数据分别初始化为大于128后的对比情况:false
对于“把两个数据分别赋值为小于128后的对比情况” 和“把两个数据分别赋值为大于128后的对比情况”两个的返回结果完全不一样是不是有点怀疑,这就是JVM的常量池了,只是对于几种基本的数据类型的包装类型,常量池只会存储小于等于127 的数据,如果大于以后那么常量池就不负责创建和管理了。