【发布时间】:2020-05-28 12:28:38
【问题描述】:
所以我正在检查Integer 的类source code (JDK 8) 以了解int 如何转换为String。它似乎正在使用一个名为 getChars 的包私有方法(第 433 行)将 int 转换为 char 数组。
虽然代码并不难理解,但有多行代码使用按位移位运算而不是简单的算术乘法/除法,例如以下代码行:
// really: r = i - (q * 100);
r = i - ((q << 6) + (q << 5) + (q << 2));
和
q = (i * 52429) >>> (16+3);
r = i - ((q << 3) + (q << 1)); // r = i-(q*10) ...
我只是不明白这样做的意义,这实际上是一种优化吗?它会影响算法的运行时间吗?
编辑:
换一种说法,既然编译器在内部做这种优化,那么这种手动优化有必要吗?
【问题讨论】:
-
据我所知compilers does this optimization for us,那为什么还要手动做呢?
-
部分答案可能是doing unsigned operations。此外,您无法确保始终在优化的环境中工作。
-
@razz 好吧,您必须询问代码的作者才能知道...互联网上的随机人猜测为什么有人会做某事方法不会有用,是吗?
-
@Sweeper 这只是我的理解,因为它在Java的官方源代码中,所以必须有充分的理由,但我可能错了。
标签: java optimization