空行会影响|空行会影响 Java 编译吗()
简评:往往越简单的问题越容易被人们忽略。问题 这个月的 Stack Overflow 有篇热门文章是国外有位开发者提出:
当我仅仅对 Java 类增加了一行空行,为什么编译后得到了两个不同的字节码文件?
【空行会影响|空行会影响 Java 编译吗()】现在有一个 Java 类
public class HelloWorld {
public static void main(String []args) {
}
}
先对这个类编译出来字节码 .class 文件进行 sha256 转译得到
9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ffHelloWorld.class
接着在同个 Java 类中增加空行
public class HelloWorld {public static void main(String []args) {
}
}
再次对编译后的字节码文件做 sha256 转译得
11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189fHelloWorld.class
天哪,它们竟然不一样,难道空行会影响代码的运行吗。
当然空行不会影响代码的运行,那为什么会编译出不一样的 .class 字节码文件呢。
分析 当我把这个问题抛给身边的程序猿朋友,
大家首先使用 base64 对文件转译同样得出了不一样的数据;
咦,不对,base64 会不会算入了文件的编译时间等文件信息;
好,测试 MD5 加密 .class 文件还是不一样的数据;
大家开始觉得是编译器出错了,按道理应该优化空行的。
文章图片
看到这建议大家动手试一试,并思考下原因
···
···
···
答案 其实答案很简单,豁然开朗:
你觉得为什么报错时 Java 会抛出具体的报错行数信息,其实 Java 会去记录行数,以便 debug 调试。
往往越简单的问题越容易被人们忽略。
原文链接:Why does a Java class compile differently with a blank line??stackoverflow.com!
推荐阅读:Level UP! 提升你的编程技能
推荐阅读
- 爱,为孩子撑起一片空
- 欢觉笑貌(五)
- 走向天空,走向云(小说)3
- 不理解句意,你还想做对所有GRE填空题()
- 了解自然大气粒子对气候的影响
- 屏幕另一边的纠结
- 【雅静的幸福空间】第60篇《创造快乐》
- 悬疑小故事――空间
- 心理工作要不断的评估现实事件对来访者心理造成的影响是什么
- 繁华声遁入空门