当前位置:首页 » 编程软件 » idea和javap反编译

idea和javap反编译

发布时间: 2025-01-02 05:43:51

A. Intellij IDEA 怎么向Eclipse一样在编译jar文件的时候修改jdk版本

可以试试
在jar包中,用winrar解压一个类文件,然后在命令行下面输入
javap -verbose classname
会输出一些信息,大致如下:
Compiled from "HtmlCrawer.java"
public class org.eagleeye.html.HtmlCrawer extends java.lang.Object
SourceFile: "HtmlCrawer.java"
minor version: 0
major version: 50
Constant pool:
const #1 = class #2; // org/eagleeye/html/HtmlCrawer
const #2 = Asciz org/eagleeye/html/HtmlCrawer;
const #3 = class #4; // java/lang/Object
const #4 = Asciz java/lang/Object;
const #5 = Asciz client;

B. 字符拼接你选择string.format()还是“+”来进行拼接

各位小伙伴在字符串拼接时应该都见过下面这种提示:


内容翻译:报告 StringBuffer、StringBuilder 或 StringJoiner 的任何用法,这些用法可以用单个 java.lang.String 串联来替换。使用字符串串联可以使代码更短、更简单。只有当得到的串联至少与原始代码一样高效或更高效时,此检查才会报告。


大家普遍认知中,字符串拼接要使用 StringBuilder,那为什么 idea 会建议你是用 “+” 呢,那到底 StringBuilder 和 “+” 有什么具体区别呢,我们一起来探究一下。



在普通的几个字符串拼接成一个字符串时,使用 “+” 拼接字符串,实际上,从 JDK5 开始,Java 编译器就做了优化,使用 “+” 拼接字符串,编译器编译后实际就自动优化为使用 StringBuilder。新建测试类 StringTest,分别创建使用 “+” 拼接字符串和使用 StringBuilder 拼接字符串的方法;并新增 Junit 测试用例,分别调用拼接字符串 100000 次,打印耗时。执行 Junit 用例,看耗时统计输出,差异虽小,考虑执行了 100000 次,每次耗时差异更小,程序执行有各种因素影响执行效率,基本一致。从 class 文件所在目录,执行 javap -c StringTest.class,对 class 文件进行反编译,查看编译后的代码差异。从图上可以看出两种拼接方法反编译后完全一样,执行效率自然也是一样的。既然执行效率一样,从代码简洁利于阅读考虑,推荐使用 “+” 拼接字符串。



而在循环拼接一个字符串时,虽然 “+” 拼接字符串编译后也会变成 StringBuilder,但是每次循环处理都会 new 一个 StringBuilder 对象,耗时会大大增加。直接使用 StringBuilder,new 一次就可以了,效率相对高。新增 2 个 Junit 测试用例,循环拼接 10000 次拼接一个字符串,执行 Junit 用例,看耗时统计输出,差异明显。



总结来说:



  • 单纯字符串拼接使用 “+”,更快更简洁。

  • 循环拼接时使用 “+” 拼接字符串效率较低,推荐使用 StringBuilder。



作者:京东零售 姜波 来源:京东云开发者社区 转载请注明来源

热点内容
日本细菌战数据库 发布:2025-03-11 00:29:34 浏览:423
钓鱼直播用什么配置 发布:2025-03-11 00:28:39 浏览:415
高配置服务器搭建虚拟机集群 发布:2025-03-11 00:27:18 浏览:369
在线印刷源码 发布:2025-03-11 00:25:06 浏览:717
python矩阵转置函数 发布:2025-03-11 00:22:53 浏览:547
java缓存策略 发布:2025-03-11 00:18:26 浏览:897
cc怎么上传视频 发布:2025-03-11 00:17:51 浏览:805
安卓系统怎么设置伴奏 发布:2025-03-11 00:16:13 浏览:183
shell脚本如何发送 发布:2025-03-11 00:14:37 浏览:606
dnf数据库修改 发布:2025-03-11 00:13:53 浏览:936