2009-06-17 64 views

回答

5

只有當你想確保你得到一個獨特的實例,所以幾乎從來沒有。

某些數字可以在自動複製時被緩存(儘管Longs aren't guaranteed to be),這可能會導致問題。但是任何會因爲緩存而破壞的代碼可能存在更深層次的問題。現在,我想不出一個有效的案例。

1

我能想到的唯一的事情就是讓拳擊明確,雖然相當於autoboxed代碼實際上是編譯成Long.valueOf(SOME_CONSTANT),它可以緩存較小值:(JVM從SRC)

public static Long valueOf(long l) { 
    final int offset = 128; 
    if (l >= -128 && l <= 127) { // will cache 
     return LongCache.cache[(int)l + offset]; 
    } 
     return new Long(l); 
    } 

。沒有什麼大不了的,但我不喜歡看到代碼不斷地裝箱和拆箱,而不考慮類型,這可能會馬虎。

從功能上來說,我看不出一種方式或另一種方式的差異。新的long仍然會等於,hashcode等於自動複製的,所以如果你願意的話,我甚至不會看到你如何做出功能上的區別。

4

我的問題是有沒有充足的理由這樣做?

如果您想編寫與舊版JRE兼容的代碼,您仍然可以使用它。 valueOf(long)僅在Java 1.5中引入,因此在Java 1.4之前以及構造函數是直接從長的的唯一方法。我期望它不被棄用,因爲構造函數仍然在內部使用。

+0

這確實是一個很好的理由(儘管Java應用程序的百分比仍然在1.4或更低?)。 – 2009-06-17 20:40:54

相關問題