有一个为null的常量的目的吗?

时间:2013-01-30 17:35:01

标签: java null constants

我最近看到一些代码中的某些东西让我很好奇,如果它实际上有某种优化或性能影响。在常量文件中这是一行:

public static final Object NULL = null;

然后,在整个代码中,不是明确使用null关键字,而是使用Constants.NULL引用它。

之前我曾见过这样的事情:

public static final String EMPTY_STRING = "";

......如果它试图避免创建大量重复的""实例,那么这似乎至少有点意义。但它真的与null有什么不同,因为它实际上不是任何一种对象吗?有什么我想念的吗?

4 个答案:

答案 0 :(得分:4)

两者都没有任何意义。在代码中的多个位置使用""不会创建String对象的多个实例。除非您显式调用new String("");,否则JVM只会创建一个字符串池并引用每个特定字符串的一个实例。

答案 1 :(得分:3)

我不认为以这种方式定义和使用NULL不仅仅会增加噪音。也许编写该代码的人来自C ++背景,并且更喜欢NULLnull更熟悉的外观。

第二个例子也值得怀疑,因为多次使用""不会导致为每次使用创建单独的String对象。引用JLS

  

此外,字符串文字始终引用类String的同一实例。这是因为字符串文字 - 或者,更强一些地,作为常量表达式的值的字符串(第15.28节) - 被“实例化”以便使用方法String.intern共享唯一实例。

答案 2 :(得分:0)

有一个使用Object.NULL的目的。

假设您有一堆验证对象是否为null的代码。因此,作为一项新功能的一部分,在某些情况下为空对象时,您需要使用默认值。

使用简单的if obj!= null,您无法跟踪对象是否针对null进行验证。但是,如果使用obj!= Object.NULL,则可以使用IDE /编辑器来帮助您找到这些用法。

答案 3 :(得分:-1)

由于java中的字符串池概念而占用的内存没有任何差别,并且当使用NULL常量而不是null或EMPTY_STRING而不是“”时,它会使代码看起来更脏。

它们都是自我解释的,因此不需要为它们创建命名常量。