iconst、bipush、sipush、ldc指令的区别

iconst、bipush、sipush、ldc指令的区别文章目录 1 前言 2 iconst3 bipush4 sipush5 ldc 转载 1 前言 JVM 中 int 类型数值 根据取值范围将入栈的字节码指令就分为 4 类 取值 1 5 采用 iconst 指令 取值 128 127 采用 bipush 指令 取值 32768 32767 采用 sipush 指令 取值 采用 ldc 指令 2 iconst 当 int 取值 1 5 时 JVM 采用 iconst 指令将常量压入栈中 定义 Test ja

1、前言

JVM中 int 类型数值,根据 取值范围将 入栈的 字节码指令 就分为4类:

取值 -1~5 采用 iconst 指令;

取值 -128~127 采用 bipush 指令;

取值 -32768~32767 采用 sipush指令;

取值 -~ 采用 ldc 指令。

2、iconst

当int取值 -1~5 时,JVM采用iconst指令将常量压入栈中。

定义 Test.java文件

1 public static void main(String[] args) { 
    2 int i = 5; 3 int j = -1; 4 } 

使用 javap -v Test.class 进行反编译,得到 class 反编译后的文件。

分析class文件,int 取值 0~5 时,JVM采用 iconst_0、iconst_1、iconst_2、iconst_3、iconst_4、iconst_5指令将常量压入栈中;

取值-1时,采用iconst_m1 指令将常量压入栈中。

3、bipush

当int取值 -128~127 时,JVM采用 bipush 指令将常量压入栈中。

定义 Test.java 文件

1 public static void main(String[] args) { 
    2 int i = 127; 3 } 

class 文件片段中 是采用 bipush 指令将常量 127 压入栈中。

4、sipush

当int取值 -32768~32767 时,JVM 采用 sipush 指令将常量压入栈中。

定义 Test.java 文件

1 public static void main(String[] args) { 
    2 int i = 32767; 3 } 

class 文件片段中 是采用 sipush 指令将常量32767压入栈中。

5、ldc

当int取值 -~ 时,JVM采用 ldc 指令将常量压入栈中。

定义 Test.java 文件

public static void main(String[] args) { 
    int i = Integer.MAX_VALUE; } 

class 文件片段中 是采用 ldc 指令将 常量压入栈中,需要注意的是ldc指令是从常量池中获取值的,也就是说在这段范围( -~ )内的int值是存储在常量池中的。

如理解有误还望明白人不吝指出。

转载:

https://blog.csdn.net/zhaow823/article/details/

https://blog.csdn.net/Gabriel/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176817.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:58
下一篇 2026年3月26日 下午8:58


相关推荐

  • How AHI Fintech and DataVisor are Securing Data through AI and Big Data

    How AHI Fintech and DataVisor are Securing Data through AI and Big Data

    2022年4月2日
    51
  • Windows下dump文件生成与分析

    Windows下dump文件生成与分析一、生成Dump文件方式1.1任务管理器在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程。右键—>创建转储文件。此时会在默认的目录下创建出一个dump文件。可以看出,此种方法只适用于程序崩溃但没有立即自行退出的情况。倘若程序故障后自行退出,则此方法就难以应用。不过,我们可以在注册表中添加如下信息已确保系统在程序崩

    2022年5月2日
    56
  • 数据库锁分类和总结

    数据库锁分类和总结锁锁是网络数据库中的一个非常重要的概念 当多个用户同时对数据库并发操作时 会带来数据不一致的问题 所以 锁主要用于多用户环境下保证数据库完整性和一致性 帮助理解 以商场的试衣间为例 每个试衣间都可供多个消费者使用 因此 可能出现多个消费者同时需要使用试衣间试衣服 为了避免冲突 试衣间装了锁 某一个试衣服的人在试衣间里把锁锁住了 其他顾客就不能从外面打开了 只能等待里面的顾客试完衣服

    2026年3月18日
    2
  • 我的博客日记第一天「建议收藏」

    我的博客日记第一天「建议收藏」这是我开通博客的第一天,也是我的第一个博客,

    2022年4月29日
    43
  • 正确的-配置Tomcat环境变量

    正确的-配置Tomcat环境变量跟着配就完事,超级正确

    2022年5月27日
    44
  • PyCharm入门教程——用户界面导览「建议收藏」

    PyCharm入门教程——用户界面导览「建议收藏」JetBrainsPyCharm是一种PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。通过这篇文章,您可以了解PyCharm用户界面是如何组织的,以帮助您在工作环境中找到自己的方式。当您第一次运行PyCharm或没有打开任何项目时,PyCharm将显示欢迎屏幕,允许快速…

    2022年8月28日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号