3

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

public static final Object NULL = null;

然后,在整个代码中,不是显式使用null关键字,而是使用Constants.NULL.

我以前见过这种事情,比如:

public static final String EMPTY_STRING = "";

""...如果这是为了避免创建大量重复实例,那似乎至少有点道理。但它真的与 有什么区别null吗,因为它实际上不是任何类型的对象?有什么我想念的吗?

4

4 回答 4

4

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

于 2013-01-30T17:41:09.263 回答
3

我不认为NULL以这种方式定义和使用只会增加噪音。也许编写该代码的人都有 C++ 背景,并且更喜欢NULLover null.

第二个例子也是有问题的,因为""多次使用不会导致String每次使用都创建一个单独的对象。引用JLS

此外,字符串字面量始终指代同一个 class 实例String。这是因为字符串文字 - 或者更一般地说,作为常量表达式值的字符串(第 15.28 节) - 是“内部的”,以便使用方法共享唯一实例String.intern

于 2013-01-30T17:38:45.177 回答
0

使用Object.NULL 是有目的的。

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

使用简单的 if obj != null 您无法追踪您的对象验证无效的位置。但是如果您使用 obj != Object.NULL 那么您可以使用您的 IDE/编辑器来帮助您找到这些用法。

于 2020-06-20T13:43:15.793 回答
-1

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

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

于 2013-01-30T18:03:26.847 回答