空行会影响 Java 编译吗?

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了空行会影响 Java 编译吗?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
简评:往往越简单的问题越容易被人们忽略。

问题

这个月的 Stack Overflow 有篇热门文章国外有位开发者提出:
当我仅仅对 Java 类增加了一行空行,为什么编译后得到了两个不同的字节码文件?

现在有一个 Java 类

public class HelloWorld {   public static void main(String []args) {   } }

先对这个类编译出来字节码 .class 文件进行 sha256 转译得到

9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff  HelloWorld.class

接着在同个 Java 类中增加空行

public class HelloWorld {    public static void main(String []args) {   } }

再次对编译后的字节码文件做 sha256 转译得

11f7ad3ad03eb9e0bb7bfa3b97bbe0F17d31194d8d92cc683CFbd7852e2d189f  HelloWorld.class

天哪,它们竟然不一样,难道空行会影响代码的运行吗。

当然空行不会影响代码的运行,那为什么会编译出不一样的 .class 字节码文件呢。

分析

当我把这个问题抛给身边的程序猿朋友
大家首先使用 base64 对文件转译同样得出了不一样的数据;
咦,不对,base64 会不会算入了文件的编译时间等文件信息
好,测试 MD5 加密 .class 文件还是不一样的数据;
大家开始觉得是编译器出错了,按道理应该优化空行的。

空行会影响 Java 编译吗?

看到这建议大家动手试一试,并思考下原因
···
···
···

答案

其实答案很简单,豁然开朗:

你觉得为什么报错时 Java 会抛出具体的报错行数信息,其实 Java 会去记录行数,以便 debug 调试。

往往越简单的问题越容易被人们忽略。

原文链接:Why does a Java class compile differently with a blank line?

脚本宝典总结

以上是脚本宝典为你收集整理的空行会影响 Java 编译吗?全部内容,希望文章能够帮你解决空行会影响 Java 编译吗?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。