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

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

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

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

 Steve McLeod11 мая 2012 г., 16:30
@ ThomasJungblut вы догадались, или у вас есть точная информация, что именно так этот код превратился в Java src?
 Thomas Jungblut11 мая 2012 г., 16:31
Просто шутка. Хотя пытался быть смешным.
 Marc11 мая 2012 г., 16:23
Я никогда не видел это слово в заголовке твоего сообщения, как в этом контексте.
 Steve McLeod11 мая 2012 г., 16:27
Хороший вопрос. Я взглянул на исходный код и заметил, что эта идиома используется несколько раз. Таинственный
 Thomas Jungblut11 мая 2012 г., 16:28
Некоторые ребята хотели проверить, правильно ли их удаляет javac.

Ответы на вопрос(3)

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

 Stephen C11 мая 2012 г., 17:24
@ mattb - Если вы собираетесь придираться к ответу, стоит понять, что на самом деле говорят слова вопроса.
 Joshua23 сент. 2013 г., 05:11
@ mattb Я опоздал на год, но я делаю это сейчас, и это в цикле, который достигает 0. Это избыточно, но хорошо знать, что это ноль, так что ничего не ломается.
 aioobe11 мая 2012 г., 16:37
Вопрос был в том, какова цель и мой ответ показывает, что это не может иметь разумной цели.
 matt b11 мая 2012 г., 16:31
Это объясняет вывод операции, но на самом деле не объясняет реального вопроса - зачем писать код для этого?

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

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

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

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

В классе JavaDocs:

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

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

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

Ваш ответ на вопрос