Вопрос по java – Какова цель сдвига битового значения int на ноль?

11

Глядя на исходный код класса java.nio.DirectByteBuffer, я нашел это:

<code>if ((length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) ....
</code>

Какова цель смещения длины на ноль битов? Может ли это быть какая-то оптимизация производительности или что-то еще?

@ ThomasJungblut вы догадались, или у вас есть точная информация, что именно так этот код превратился в Java src? Steve McLeod
Просто шутка. Хотя пытался быть смешным. Thomas Jungblut
Я никогда не видел это слово в заголовке твоего сообщения, как в этом контексте. Marc
Хороший вопрос. Я взглянул на исходный код и заметил, что эта идиома используется несколько раз. Таинственный Steve McLeod
Некоторые ребята хотели проверить, правильно ли их удаляет javac. Thomas Jungblut

Ваш Ответ

3   ответа
3

i << 0 не является опцией. Оценивается так же, какi.

@ mattb - Если вы собираетесь придираться к ответу, стоит понять, что на самом деле говорят слова вопроса. Stephen C
@ mattb Я опоздал на год, но я делаю это сейчас, и это в цикле, который достигает 0. Это избыточно, но хорошо знать, что это ноль, так что ничего не ломается. Joshua
Вопрос был в том, какова цель и мой ответ показывает, что это не может иметь разумной цели. aioobe
Это объясняет вывод операции, но на самом деле не объясняет реального вопроса - зачем писать код для этого? matt b
2

i << 0 явно избыточен. У программиста на Java нет веской причины намеренно писать этот код.

Я бы сказал, что этот код:

написано кем-то, кто не думал, написано кем-то, кто не понимает, что такое<< оператор делает, результат какого-то полу-механического рефакторинга или изначально создан каким-то генератором кода или переводчиком.

Однако, есть хороший шанс, что байт-код или JIT-компилятор это оптимизирует или что это не окажет существенного влияния на производительность в любом случае.

16

В классе JavaDocs:

// -- This file was mechanically generated: Do not edit! -- //

Так что это не ручной код. Он был сгенерирован сценарием, и автор сценария не добавил оптимизацию для случая, когда величина сдвига в битах равна нулю.

Для ShortBuffer, IntBuffer, LongBuffer смещения умножаются на 2, 4, 8 и т. Д. Смещением влево. Оптимизация случая << 0 усложнит генерацию кода без практической выгоды. AutomatedMike

Похожие вопросы