为什么BigInteger不使用局部变量来避免使用getfield操作码?
BigInteger中的mag和String中的值都是最终的。
BigInteger的源代码和操作码
String.trim的来源
答案 0 :(得分:2)
不应该问为什么它不这样做,你应该问为什么一个人会这样做?,考虑到需要额外的代码和澄清评论。
这些微优化通常不是必要的,因为保存操作码只会减少方法的字节码大小,这反过来主要影响JIT的解释器和早期内联决策。或者换句话说,一旦代码变得足够热以进行JIT,它并不会真正影响生成的程序集,因为编译器将能够看到这些负载都引用相同的变量。
String是JVM中非常重要的一个类,其中这种微小的优化可能会稍微提高启动速度。
另一方面,BigInteger对于JVM启动并不重要,如果经常使用它,这将被JIT优化掉,因为解释器性能通常与BigInt用例无关。