有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译为什么Java编译器默认不缩短名称?(用于性能和模糊处理)

我无法理解为什么Java编译器不通过用一些唯一的ID替换变量、参数和方法名来缩短它们的名称

例如,考虑到

public class VeryVeryVeryVeryVeryLongClass {

    private int veryVeryVeryVeryVeryLongInt = 3;

    public void veryVeryVeryVeryVeryLongMethod(int veryVeryVeryVeryVeryLongParamName) {
        this.veryVeryVeryVeryVeryLongInt = veryVeryVeryVeryVeryLongParamName;
    }
}

编译后的文件包含所有这些很长的名称:

简单的唯一ID难道不会加快解析速度,并提供第一次混淆吗


共 (2) 个答案

  1. # 1 楼答案

    您假设总是需要模糊处理,但事实并非如此:

    • 反射会崩溃,JavaBeans和许多依赖它的框架也会随之崩溃
    • 堆栈跟踪将变得完全无法读取
    • 如果您试图针对已编译的JAR进行编码,那么最终会得到像String name = p.a1()这样的代码,而不是String name = p.getName()

    在交付完成的应用程序时,模糊处理通常是最后一步,即使如此,除非目标平台有严重的内存限制,否则它也不会被特别频繁地使用

  2. # 2 楼答案

    Wouldn't simple unique IDs speed the parsing?

    不,它会添加一个映射,这可能会减慢速度

    and also provide a first obfuscation

    是的,但是谁想让编译器进行模糊处理呢?不是我

    你的建议毫无价值