2009-06-17 47 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

相关问题