侧边栏壁纸
博主头像
晓果冻博主等级

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

  • 累计撰写 103 篇文章
  • 累计创建 14 个标签
  • 累计收到 45 条评论

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

晓果冻
2021-09-05 / 0 评论 / 1 点赞 / 133 阅读 / 766 字
温馨提示:
本文最后更新于 2021-10-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

0

评论区