展望java.nio.DirectByteBuffer類的源代碼,我發現這一點:將int值移位零的目的是什麼?
if ((length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) ....
什麼是零位移位長度的目的是什麼?這可能是一些性能優化或其他什麼?
展望java.nio.DirectByteBuffer類的源代碼,我發現這一點:將int值移位零的目的是什麼?
if ((length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) ....
什麼是零位移位長度的目的是什麼?這可能是一些性能優化或其他什麼?
做i << 0
是沒有任何操作。它的評估結果與i
相同。
這解釋了操作的輸出,但它並沒有真正解釋真正的問題 - 爲什麼要編寫代碼來做到這一點? –
問題是,*目的*是什麼,我的答案表明它不可能有明智的目的。 – aioobe
@mattb - 如果你打算挑選一個答案,它可以很好地理解這個問題的實際字面意思。 –
我想我已經解決了它。
在類的JavaDoc:
// -- This file was mechanically generated: Do not edit! -- //
,所以它不是手工編碼。它是由腳本生成的,腳本編寫者沒有爲位移量爲零的情況添加優化。
對於ShortBuffer,IntBuffer,LongBuffer,通過左移使偏移量乘以2,4,8等。優化掉「0」情況會使代碼複雜化,因此無法獲得實際收益。 – AutomatedMike
i << 0
顯然是多餘的。 Java程序員沒有理由故意寫這些代碼。
我會說,這個代碼是:
<<
運營商做什麼寫,但是,字節碼或JIT編譯器很有可能會優化這一點,或者它不會顯着影響性能。
我從來沒有在您的發帖標題中看到過這個詞。 – Marc
好問題。我查看了源代碼並注意到這個習語被多次使用。神祕。 –
有些人想檢查一下javac是否正確刪除它們。 –