将字符串定义为Null更好或为空字符串

时间:2012-07-30 22:03:04

标签: java

我来自C#.net背景,每当我有一个字符串时,我将其声明为String.Empty 现在我正在查看来自同事的Java代码,他已经用这样的方法声明了他的字符串:

String myStr = null;

我不喜欢它,更糟糕的是,他在“IF”块中为这些字符串赋值,它可能甚至不符合条件,然后在方法结束时调用{{ 1}}在他们身上。

所以我的问题是Java中的首选方式是什么?您认为将它们定义为myStr.length()或将其保留为String.Empty并在调用null之前进行null检查是否更好?

4 个答案:

答案 0 :(得分:5)

通常,使用null值是一个坏主意,特别是如果它们从方法返回或传递给另一个方法。使用Null Object pattern更好,在字符串的情况下,Null对象是一个空字符串。通过始终如一地避免空值,获得NullPointerException的可能性变小,代码变得更具可读性(这在Clean Code第7章,第110-112页中详细讨论。)

在Java String s = ""中没有分配任何内存,因为JVM会实现字符串文字的内部,所以甚至没有性能差异(即使有,也会是一个过早的优化)。

答案 1 :(得分:3)

认为两者都适用于不同的场景,将其分配为null会更好(节省内存并且更不容易出错),前提是你设置一些字符串,否则你将获得空指针异常。

答案 2 :(得分:3)

他们都有自己的用途。空字符串是带内的,即可以在输入中出现,因此它们不能用作标记。 Null仅 作为哨兵使用。如果你要附加它,你应该用“”来初始化它。如果您要立即重新分配它,则根本不需要提供任何值,您应该将声明与重新分配相结合。我看到太多了:

String s = new String();
s = "some string";

这一切告诉我的是有人不懂语言。

答案 3 :(得分:2)

空字符串通常表示如果要追加,则应使用StringBuilder(这是常见情况)。 null引用“更好”,因为它使用更少的内存,并且检查String是否为null与检查它是否为空相比更快。我建议不要使用空字符串而不是将它们声明为null,尽管在使用它之前仍应检查空引用,除非你100%确定它会在某个阶段被分配一个值。