我不明白为什么 Java 编译器不通过用一些唯一的 ID 替换它们来缩短变量、参数、方法名称。
例如,给定类
public class VeryVeryVeryVeryVeryLongClass {
private int veryVeryVeryVeryVeryLongInt = 3;
public void veryVeryVeryVeryVeryLongMethod(int veryVeryVeryVeryVeryLongParamName) {
this.veryVeryVeryVeryVeryLongInt = veryVeryVeryVeryVeryLongParamName;
}
}
编译后的文件包含所有这些很长的名字:
简单的唯一 ID 不会加快解析速度,并提供第一次混淆吗?
最佳答案
您假设始终需要混淆,但事实并非如此:
- 反射会中断,JavaBeans 和依赖它的许多框架
- 堆栈跟踪将变得完全不可读
- 如果您尝试针对已编译的 JAR 进行编码,您最终会得到类似
String name = p.a1()
而不是String name = p.getName()
混淆通常是最后一步,当您交付完成的应用程序时,即使这样也不会特别经常使用,除非目标平台有严重的内存限制。
关于java - 为什么 Java 编译器默认不缩短名称? (性能和混淆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678384/