public static void main(String[] a) {
String target="abc";
String r;
switch(target){
case "abc":
r="cba";
break;
default:
case "def":
r="fed";
}
System.out.println(r);
}
Eclipse JDT
Stack: 2, Locals: 4
0 ldc <String "abc"> [16]
2 astore_1 [target]
3 aload_1 [target]
4 dup
5 astore_3
6 invokevirtual java.lang.String.hashCode() : int [18]
9 lookupswitch default: 66
case 96354: 36
case 99333: 48
36 aload_3
37 ldc <String "abc"> [16]
39 invokevirtual java.lang.String.equals(java.lang.Object) : boolean [24]
42 ifne 60
45 goto 66
48 aload_3
49 ldc <String "def"> [28]
51 invokevirtual java.lang.String.equals(java.lang.Object) : boolean [24]
54 ifne 66
57 goto 66
60 ldc <String "cba"> [30]
62 astore_2 [r]
63 goto 69
66 ldc <String "fed"> [32]
68 astore_2 [r]
69 getstatic java.lang.System.out : java.io.PrintStream [34]
72 aload_2 [r]
73 invokevirtual java.io.PrintStream.println(java.lang.String) : void [40]
76 return
经过:
1.switch通过hashcode找出大概位置(因为有hashcode冲撞的可能)
2.调用String.equals方法找到正确目标字节码位置,直接执行操作
JDK7u10
stack=2, locals=5, args_size=1
0: ldc #2 // String abc
2: astore_1
3: aload_1
4: astore_3
5: iconst_m1
6: istore 4
8: aload_3
9: invokevirtual #3 // Method java/lang/String.hashCode:()I
12: lookupswitch { // 2
96354: 40
99333: 55
default: 67
}
40: aload_3
41: ldc #2 // String abc
43: invokevirtual #4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
46: ifeq 67
49: iconst_0
50: istore 4
52: goto 67
55: aload_3
56: ldc #5 // String def
58: invokevirtual #4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
61: ifeq 67
64: iconst_2
65: istore 4
67: iload 4
69: lookupswitch { // 2
0: 96
2: 102
default: 102
}
96: ldc #6 // String cba
98: astore_2
99: goto 105
102: ldc #7 // String fed
104: astore_2
105: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
108: aload_2
109: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
112: return
经过:
1.switch通过hashcode找出大概位置(因为有hashcode冲撞的可能)
2.调用String.equals方法找到正确目标,此目标已经在内部生成字节码时用int值代替
3.通过switch代替的int值,找到正确目标字节码位置,直接执行操作
总结:
Eclipse JDT对switch字符串生成的字节码更高效,更紧凑
作者:翁志艺
分享到:
相关推荐
Eclipse JDT(Java Development Tools)是Eclipse IDE的一个重要组成部分,提供了丰富的API用于Java源代码的处理,包括生成和操作AST。本教程将介绍如何利用Eclipse JDT生成Java源代码的AST,并通过可视化工具进行...
意味着系统在运行时找不到Eclipse JDT Core库,这是一个关键的依赖,因为Drools使用它来编译和加载用户定义的Java代码,特别是那些由DRL规则文件动态生成的代码。 Eclipse JDT Core是Eclipse IDE的一部分,它提供了...
9. **团队协作**:JDT与Eclipse的团队协作功能紧密集成,支持多种版本控制系统,如Git、SVN等,方便开发者协同开发和管理代码。 10. **Javadoc和源码查看**:Eclipse JDT内置了Javadoc查看器,可以查看API文档,...
eclipse.jdt.core, jdt/核心项目库( eclipse jdt core ) JDT内核这是 Eclipse 开发工具的Java的核心部分。 它包含对编译和使用Java代码的非用户界面支持,包括:可以独立运行或者作为 Eclipse IDE的一部分的增量或者...
Eclipse JDT(Java Development Tools)是Eclipse IDE中用于Java开发的核心组件,它提供了诸如编辑器、语法高亮和代码分析等丰富的功能。在Eclipse JDT中,AST(Abstract Syntax Tree,抽象语法树)是解析Java源代码...
7. **插件扩展**:Eclipse作为一个开放平台,开发者可以利用Eclipse.jdt提供的API开发自定义插件,扩展其功能,满足特定的开发需求。 8. **代码分析**:它包含静态代码分析工具,可以检查代码质量,发现潜在的问题...
1. **源代码编辑器**:Eclipse JDT提供了集成的Java源代码编辑器,支持语法高亮、自动代码完成、错误检测和快速修复,以及重构工具。这些功能极大地提高了开发效率和代码质量。 2. **构建工具**:JDT包含了一个基于...
Class not found: org.eclipse.jdt.core.JDTCompilerAdapter。 解决方法: 拷贝下面这些jar包到ant_home/lib org.eclipse.jdt.compiler.tool_1.0.100.v_972_R35x.jar org.eclipse.jdt.core_3.5.2.v_981_R35x.jar org...
1. **安装与配置**:指导用户如何下载、安装Eclipse IDE以及JDT插件,设置Java开发环境,包括JDK的配置和工作空间的设定。 2. **工作台概览**:介绍Eclipse的工作台界面,包括视图、编辑器、透视图等元素的使用,...
- JDT用户界面部分主要包括了如何利用Eclipse的UI框架来显示和编辑Java代码。 - 包括Java编辑器、查看器等组件的设计和实现。 ### 五、JDT API的使用 #### 5.1 操作Java代码 - **描述**:介绍如何通过API操纵Java...
1.下载Eclipse plugin 补丁文件 org.eclipse.jdt.core_3.6.1.v_A68_R36x...7. 选择rt.jar,然后点击"Source Attachment"按钮,弹出对话框后选择"External File",然后把你的JDK安装目录下的src.zip文件与rt.jar关联上。
标题“org.eclipse.jdt.core_3.2.0.v_671”表明这是一个与Eclipse集成开发环境(IDE)相关的组件,特别是它的Java开发工具(JDT)核心部分。这个版本号“3.2.0.v_671”表示这是JDT核心的特定版本,其中“3.2.0”可能...
这些协议规定了用户如何使用、分发和修改Eclipse的代码,保障了开源社区的协作与创新。 总结起来,"org.eclipse.jdt.core_3.6.0.v_A58.jar"是Eclipse JDT的核心,为Java开发者提供了强大的开发支持。通过理解和掌握...
org.eclipse.jdt.* 的目录和文件 全部拷贝到 flexbuilder 的plugin (若为myEclipse则是将myEclipse下eclipse\plugins) flashbuilder也一样 ----下面是在FlexBuilder中配置VSS ------- 1. 首先绑定项目到...
方便eclipse调试JDK代码 实时查看JDK代码的值
在Java开发中,Eclipse JDT (Java Development Toolkit) 是一个强大的工具,它提供了对Java源代码的抽象语法树(AST, Abstract Syntax Tree)表示,使得我们可以方便地生成、解析和修改Java代码。本示例展示了如何使用...
这个名为"eclipse.jdt.core"的模块是JDT的核心部分,它提供了丰富的API和功能,允许开发者进行Java源代码的解析、编译、调试以及代码分析等操作。在"修改后的Eclipse JDT核心以解析存储库中的Java源代码"的场景下,...