一、概述

二、前言

当int类型

取值-1~5采用iconst指令

取值-128~127采用bipush指令

取值-32768~32767采用sipush指令

取值-2147483648~2147483647采用 ldc 指令。

2.1、iconst指令

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

public static voidmain(String[] args) {int i = 5;int j = -1;

}

查看class文件

public static voidmain(java.lang.String[]);

Code:0: iconst_51: istore_12: iconst_m13: istore_24: return

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

2.2、bipush

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

public static voidmain(String[] args) {int i = 127;

}

查看class文件

public static voidmain(java.lang.String[]);

Code:0: bipush 127

2: istore_13: return

2.3、sipush

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

public static voidmain(String[] args) {int i = 32767;

}

查看class文件

public static voidmain(java.lang.String[]);

Code:0: sipush 32767

3: istore_14: return

2.4、ldc

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

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

}

查看class

public static voidmain(java.lang.String[]);

Code:0: ldc #3 //int 2147483647

2: istore_13: return

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

java sipush_003-整型入栈指令(iconst、bipush、sipush、ldc)相关推荐

  1. JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc)

    官网:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html 原文地址:http://www.linmuxi.com/2016/02 ...

  2. 深入理解Java的整型类型:如何实现2+2=5?

    先看下这段神奇的Java代码: public static void main(String[] args) throws Exception {doSomethingMagic();System.o ...

  3. [小技巧][JAVA][转换]整型int与字符char相互转换

    借助String.valueOf()过渡 char -> String ->int char c; String str = String.valueOf(c); int i = Inte ...

  4. java中将整型转换为字符型_JAVA的整型与字符串相互转换

    JAVA的整型与字符串相互转换 1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Int ...

  5. java长整型时间转日期_C#长整型时间与java长整型时间转换

    最近在有一个解析并转发病毒软件日志的活,这个软件用的是SQLite嵌入式数据库存储病毒日志.查询病毒记录后,我发现它用长整型存储攻击时间这个字段,而且是一个10位的值.而我的解析系统是用C#写的,C# ...

  6. java 取整型的低八位_Java 基础(十五)并发工具包 concurrent

    本文目录: java.util.concurrent - Java 并发包简介 阻塞队列 BlockingQueue 数组阻塞队列 ArrayBlockingQueue 延迟队列 DelayQueue ...

  7. Java中整型的缓存机制

    本文将介绍Java中Integer的缓存相关知识.这是在Java 5中引入的一个有助于节省内存.提高性能的功能.首先看一个使用Integer的示例代码,从中学习其缓存行为.接着我们将为什么这么实现以及 ...

  8. java短整型_JAVA个基本数据类型

    Java有8大基本数据类型,分别是: 1).字节类型:byte Byte数据类型是8位 取值范围:(-128 - 127) 默认值:0 byte a= 100; byte b = -20; 2).短整 ...

  9. java短整型_Java的基本数据类型

    变量就是用来储存值而保留的内存位置.这就意味着当创建一个变量时就会在内存中占用一定的空间. 基于变量的数据类型,操作系统会进行内存分配并且决定什么将被储存在保留内存中.因此,通过给变量分配不同的数据类 ...

最新文章

  1. 美多商城之订单(结算订单)
  2. mysql两台服务器怎么做数据同步_两台mysql服务器实现双机互备配置并测试数据同步...
  3. mongodb $ifNull
  4. 错误:子进程 已安装 pre-removal 脚本 返回了错误号 1
  5. Python3bytes、hex、字符串之间相互转换
  6. 智慧城市、智慧园区、智慧交通、行业经营看板、运行管理大屏、图表模板、公司经营看板、大屏可视化、BI可视化模板、智慧工厂、办公、能源、餐饮、校园、人力资源、行政、汽车、房地产、保险、医院、axure原型
  7. 3D计算机组装,3DMax电脑组装配置
  8. linux能安装cad快速看图不,cad快速看图(三种方法教你快速查看CAD图纸)
  9. 双线性插值(超级易懂的)
  10. python安装旧版本、python历史版本下载
  11. android回溯机制,Android事件分发机制全面解析
  12. Python解析CDD文件
  13. Python 调用高德 API 实现地址转为经纬度
  14. 如何使用xposed强制开启android webview debug模式
  15. CSS3与页面布局学习笔记(四)——页面布局大全(负边距、双飞翼、多栏、弹性、流式、瀑布流、响应式布局)
  16. 提示:The word is not correctly spelled 解决方法
  17. 【2020年高被引学者】 杨笛一 佐治亚理工大学
  18. vue 项目, 父组件中每次点击按钮重新加载子组件,(重新生成dom 元素)
  19. 华为 watch fit 鸿蒙,华为新款智能手表 Watch Fit 曝光,矩形表盘,支持近 100 种运动模式...
  20. python绘制七巧板_CSS3制作七巧板动画

热门文章

  1. JavaScript中Element与Node的区别,children与childNodes的区别
  2. C#的引用类型有四种类、代表、数组、接口
  3. Android动画类型
  4. CSS失效的问题总结(转:孟子E章)
  5. Vue中的三种Watcher
  6. html button跳转页面_HTML常用标签
  7. Web前端——CSS层叠样式表
  8. (2)vue.js介绍
  9. (37) BFC IFC GFC FFC概念
  10. (8)css常用样式属性3