博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
空行会影响 Java 编译吗?
阅读量:5863 次
发布时间:2019-06-19

本文共 895 字,大约阅读时间需要 2 分钟。

hot3.png

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

问题

这个月的 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 会去记录行数,以便 debug 调试。

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

原文链接:

转载于:https://my.oschina.net/jpushtech/blog/2875884

你可能感兴趣的文章
Android 优化二 Java内存分配机制及内存泄漏
查看>>
Zookeeper系列——Client端
查看>>
源码阅读——十个C开源项目
查看>>
git init 和 git init –bare 的区别
查看>>
TCP/IP协议三次握手
查看>>
SQL编程之高级查询(子查询)以及注意事项
查看>>
Variables 细谈变量
查看>>
Java问答:终极父类(第一部分 下)
查看>>
socket 编程入门教程(一)TCP server 端:8、本章的完整源代码
查看>>
js事件延时处理
查看>>
ElasticSearch5.x实践_day03_01_ElasticSearch复杂搜索
查看>>
浅谈angularJs中的$watch的用法
查看>>
彻底掌握Z-index属性
查看>>
win7下添加php的环境变量(全)
查看>>
java高级工程师面试问题集结号(three)
查看>>
jar命令
查看>>
无底洞问题(multiget hole)
查看>>
docker搭建redis环境
查看>>
新浪微博PHP SDK - 获取access_token
查看>>
代理模式
查看>>