假设我定义了这样一个字符串:
private final static String s = "To Be or not to be, that is the question";
在其中一个(静态)方法中,我调用了一个接收字符串作为参数的方法:
methodThatReceivesString(s.charAt(0) + s.charAt(1) + "Inter" + s.charAt(3) + s.charAt(4))
(想法是 methodThatReceivesString()
将传递值“ToInterBe”)
我的问题是:Java 编译器是否会优化代码,使编译后的二进制文件 (.jar .dex) 已经包含“ToInterBe”?
或者这只会在应用程序运行时发生?
最佳答案
Java 编译器不会执行此操作,因为它会在技术上更改程序,因为所涉及的方法可能会在运行时产生副作用。但即使它会预先计算字符串,它仍然需要将原始字符串放入类文件中,因为它可以通过反射访问,可能与注释或其他原因相关。
我认为您正在寻找的工具是 ProGuard .如果在预先计算所有静态可判定代码后不再有代码引用它,这实际上可以删除字符串。
关于Android 中的 Java 代码编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038609/