2012-05-11 45 views
11

展望java.nio.DirectByteBuffer類的源代碼,我發現這一點:將int值移位零的目的是什麼?

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

什麼是零位移位長度的目的是什麼?這可能是一些性能優化或其他什麼?

+7

我從來沒有在您的發帖標題中看到過這個詞。 – Marc

+0

好問題。我查看了源代碼並注意到這個習語被多次使用。神祕。 –

+1

有些人想檢查一下javac是否正確刪除它們。 –

回答

3

i << 0是沒有任何操作。它的評估結果與i相同。

+3

這解釋了操作的輸出,但它並沒有真正解釋真正的問題 - 爲什麼要編寫代碼來做到這一點? –

+1

問題是,*目的*是什麼,我的答案表明它不可能有明智的目的。 – aioobe

+1

@mattb - 如果你打算挑選一個答案,它可以很好地理解這個問題的實際字面意思。 –

16

我想我已經解決了它。

在類的JavaDoc:

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

,所以它不是手工編碼。它是由腳本生成的,腳本編寫者沒有爲位移量爲零的情況添加優化。

+0

對於ShortBuffer,IntBuffer,LongBuffer,通過左移使偏移量乘以2,4,8等。優化掉「0」情況會使代碼複雜化,因此無法獲得實際收益。 – AutomatedMike

2

i << 0顯然是多餘的。 Java程序員沒有理由故意寫這些代碼。

我會說,這個代碼是:

  • 人誰沒有想到,
  • 寫的人誰不明白<<運營商做什麼寫,
  • 結果的一些半機械重構,或者最初由某種代碼生成器或翻譯器生成的。

但是,字節碼或JIT編譯器很有可能會優化這一點,或者它不會顯着影響性能。

相關問題