Итак, я изучал исходный код класса *1002* (JDK 8
) класса Integer
, чтобы понять, как int
преобразовать в String
. Похоже, что для преобразования массива int
в char
используется частный метод пакета getChars
(строка 433).
Хотя код не так уж и сложен для понимания, однако существует несколько строки кода, в которых используются операции побитового сдвига вместо простых арифметических c умножения / деления, например, следующие строки кода:
// 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) ...
Я просто делаю не понимаю смысла этого, действительно ли это оптимизация и влияет ли это на время выполнения алгоритма?
Изменить:
Другими словами, так как компилятор делает это тип внутренней оптимизации, нужна ли эта оптимизация вручную?