Java编译后为什么丢失了方法参数名?

新手一个,使用javac编译Java文件后出现.class文件,再将.class文件反编译后发现所有方法参数名都变成了var1、var2……,这是编译还是反编译的问题呢?可以解决吗?

另外,为什么同样的源码.java文件,别人编译的跟我编译的.class文件不一样呢?文件大小和文件内容(用16进制编辑器打开查看)都不一样。如何能够知道别人的class文件是用什么方式,什么JDK编译的呢?

问题有点多,但望能得到解答。谢谢!

第1个回答  2019-05-21
1、jdk8之前,方法参数名并没有实际的用处,保留也不会有任何好处,只会占用额外的空间,出于性能考虑,没有保留,jvm是按方法签名来调用的;spring框架兴起之后,反射成为常规的应用方法,类型,保留方法参数对spring等框架来说会带来很多便利。
2、编译相同文件编译连续编译两次得到的结果应该也有一些不同,特别是jdk版本不同的情况下
相似回答