为空设置常量是否有目的



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

public static final Object NULL = null;

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

我以前见过这样的事情:

public static final String EMPTY_STRING = "";

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

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

我不

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

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

此外,字符串文字总是引用类String的同一实例。这是因为字符串文字 - 或者更一般地说,作为常量表达式值的字符串 (§15.28) - 被"扣留",以便使用方法 String.intern 共享唯一实例。

使用 Object.NULL 是有目的的。

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

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

由于

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

它们

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

相关内容

最新更新