zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

JVM学习虚拟机 常量 局部变量
2023-06-13 09:12:13 时间

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,所以上述三个
案例的结果也能解释清除了。