https://blog.csdn.net/wuzhiwei549/article/details/80626677

代码

package strings;
//: strings/WhitherStringBuilder.java public class WhitherStringBuilder {
public String implicit(String[] fields) {
String result = "";
for(int i = 0; i < fields.length; i++)
result += fields[i];
return result;
}
public String explicit(String[] fields) {
StringBuilder result = new StringBuilder();
for(int i = 0; i < fields.length; i++)
result.append(fields[i]);
return result.toString();
}
} ///:~

生成的字节码如下

public class strings.WhitherStringBuilder {
public strings.WhitherStringBuilder();
Code:
0: aload_0 // 将this引用推送至栈顶,即压入栈
1: invokespecial #8 //调用<init>方法实例化对象// Method java/lang/Object."<init>":()V
4: return public java.lang.String implicit(java.lang.String[]);
Code:
0: ldc #16 //将编号为#16的字符串推送至栈顶 // String
2: astore_2 //将栈顶引用类型值存入第三个本地变量
3: iconst_0 //将int型0推送至栈顶
4: istore_3 //将栈顶int型数值存入第四个本地变量
5: goto 32 //无条件跳转到32行
8: new #18 //新建一个StringBuilder对象编号#18,并将其引用压入栈顶// class java/lang/StringBuilder
11: dup //复制栈顶数值(在这里时引用)并将复制数值压入栈顶
12: aload_2 //将第三个本地引用推送至栈顶
13: invokestatic #20//调用静态方法(这里调用了valueOf())// Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
16: invokespecial #26//调用超类构造方法,实例初始化方法,私有方法 // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
19: aload_1 //将第二个引用本地变量(即数组引用)压入栈顶
20: iload_3 //将第四个int本地变量压入栈顶
21: aaload //将引用数组指定索引的值推送至栈顶(即二个本地引用变量所代表的数组的下标为第四个int本地变量的值)
22: invokevirtual #29//调用实例化方法append// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
25: invokevirtual #33 //调用实例化方法toString将结果转换为String// Method java/lang/StringBuilder.toString:()Ljava/lang/String;
28: astore_2 //将栈顶引用类型值存入第三个本地变量
29: iinc 3, 1 //将第4个int本地变量加1
32: iload_3 //将第4个int本地变量推至栈顶
33: aload_1 //将第二个引用类型本地办理推送至栈顶,第二个引用应该是改方法的参数的数组的引用
34: arraylength //获得数组的长度并压入栈顶
35: if_icmplt 8 //比较栈顶两int数值的大小如果小于0跳转到第8行
38: aload_2 //将第二个本地引用类型的本地变量推送至栈顶
39: areturn //返回栈顶引用型本地变量,并退出方法 public java.lang.String explicit(java.lang.String[]);
Code:
0: new #18 // class java/lang/StringBuilder
3: dup
4: invokespecial #45 // Method java/lang/StringBuilder."<init>":()V
7: astore_2
8: iconst_0
9: istore_3
10: goto 24
13: aload_2
14: aload_1
15: iload_3
16: aaload
17: invokevirtual #29 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: pop
21: iinc 3, 1
24: iload_3
25: aload_1
26: arraylength
27: if_icmplt 13
30: aload_2
31: invokevirtual #33 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
34: areturn
}

java jvm 字节码 实例的更多相关文章

  1. JVM 字节码执行实例分析

    前言 最近在看<Java 虚拟机规范>和<深入理解JVM虚拟机>,对于字节码的执行有了进一步的了解.字节码就像是汇编语言,是 JVM 的指令集.下面我们先对 JVM 执行引擎做 ...

  2. Java finally语句到底是在return之前还是之后执行(JVM字节码分析及内部体系结构)?

    之前看了一篇关于"Java finally语句到底是在return之前还是之后执行?"这样的博客,看到兴致处,突然博客里的一个测试用例让我产生了疑惑. 测试用例如下: public ...

  3. JVM 字节码指令手册 - 查看 Java 字节码

    JVM 字节码指令手册 - 查看 Java 字节码 jdk 进行的编译生成的 .class 是 16 进制数据文件,不利于学习分析.通过下命令 javap -c Demo.class > Dem ...

  4. 小师妹学JVM之:java的字节码byte code简介

    目录 简介 Byte Code的作用 查看Byte Code字节码 java Byte Code是怎么工作的 总结 简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码编译 ...

  5. JVM总结(五):JVM字节码执行引擎

    JVM字节码执行引擎 运行时栈帧结构 局部变量表 操作数栈 动态连接 方法返回地址 附加信息 方法调用 解析 分派 –“重载”和“重写”的实现 静态分派 动态分派 单分派和多分派 JVM动态分派的实现 ...

  6. 一夜搞懂 | JVM 字节码执行引擎

    前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 学习导图 一.为什么要学习字节码执行引擎? 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一 ...

  7. java class 字节码

    java class 字节码 协议: class文件 魔数(Magic):4byte -> 0xCAFEBABE 类似2f3f 版本(Version):4Byte -> 0x0000003 ...

  8. 从jvm字节码指令看i=i++和i=++i的区别

    1. 场景的产生 先来看下下面代码展示的两个场景 @Testvoid testIPP() { int i = 0; for (int j = 0; j < 10; j++) { i = i++; ...

  9. 初探JVM字节码

    作者: LemonNan 原文地址: https://juejin.im/post/6885658003811827725 代码地址: https://github.com/LemonLmNan/By ...

随机推荐

  1. CentOS 7 系统的初化始配置

    安装好CentOS7系统后我们要进行初始设置来让我们的服务器方便管理与使用,但是发现在7以前的版本都能输入的命令不能输入了,去官网查查才发发生了很大的变化,关于有哪些变化的可以点击这里查看,初始配置的 ...

  2. Jenkins自动发布代码实战篇

    Jenkins自动发布代码实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.Jenkins服务器配置秘钥对并上传到Gitlab中 1>.在Jenkins后端生成秘钥 ...

  3. if语句和case语句用法展示

    if语句和case语句用法展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单分支if条件语句 1>.语法格式一 if [ 条件判断式 ];then 源代码 fi 2& ...

  4. python自动化运维之路~DAY4

    python自动化运维之路~DAY4   作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模块导入方式详解. 关于Python有几种导入模块的方式,请参考我的另外一篇博客(第20 ...

  5. Linux记录-筛选日志sed、find、tail,du,awk命令

    1.查看某一段时间的日志 #cat hdfs-audit.log | sed -n '/2018-04-11 10:00:00/,/2018-04-11 10:01:00/ p' | more   - ...

  6. Hive记录-hive权限控制

    在使用Hive的元数据配置权限之前必须现在hive-site.xml中配置两个参数,配置参数如下: <property> <name>hive.security.authori ...

  7. bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...

  8. bootstrap中模态框的使用

    1.代码: <%--登录模态框--%> <li><a href="#" data-toggle="modal" data-targ ...

  9. SpringMVC学习笔记_01

    1.JAVAEE体系结构 JAVAEE体系结构图如下所示: 2.什么是springmvc? 什么是mvc? Model1 Model2 SpringMVC是什么? SpringMVC是一个web层mv ...

  10. Java SE之正则表达式Demo

    @Test public void regex() {//匹配教务系统课程 // String content = "公共机座 (1-10)".replaceAll(" ...