JVM学习-虚拟机栈局部变量表和常量池

案例一

public class Demo{
    public static void main(String[] args) {
        int a = 10000;
        int b = 10000;
        Integer A = 10000;
        Integer B = 10000;
        System.out.println(a==b);//true
        System.out.println(A==B);//false
    }
}

案例二

public class Demo{
    public static void main(String[] args) {
        int a = 127;
        int b = 127;
        Integer A = 127;
        Integer B = 127;
        System.out.println(a==b);//true
        System.out.println(A==B);//true
    }
}

案例三

public class Demo{
    public static void main(String[] args) {
        double a = 127d;
        double b = 127d;
        Double A = 127d;
        Double B = 127d;
        System.out.println(a==b);//true
        System.out.println(A==B);//false
    }
}

总结

上面三个案例的执行情况底层原理是什么?先说非包装类型的基本类型变量:int、short、long、byte、
float、doubke、boolean、char,这些基本类型的变量都是存放在虚拟机栈中的局部变量表中的。而其
中8种基本类型的包装类中有6种会存放在常量池种。那就是Byte、Boolean、Short、Integer、Long、
Character。Double和Float暂时没有实现,但这6种类型的取值范围也仅限于-128-127,所以上述三个
案例的结果也能解释清除了。

image-20210905152243414

Q.E.D.


一个热爱生活的95后精神小伙