3

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

String myStr = null;

我不喜欢它,更糟糕的是,他在“IF”块中为这些字符串分配值,在该块中它可能符合条件,也可能不符合条件,然后在方法结束时myStr.length()对它们调用 a 。

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

4

4 回答 4

5

一般来说,使用null值是一个坏主意,尤其是当它们从一个方法返回或传递给另一个方法时。使用Null Object 模式更好,在字符串的情况下,Null Object 是一个空字符串。通过始终避免空值,获得 NullPointerException 的概率会变得更小,并且代码变得更具可读性(这将在Clean Code第 7 章第 110-112 页中详细讨论)。

在 JavaString s = ""中不分配任何内存,因为 JVM 将保留字符串文字,因此甚至没有性能差异(即使有,也将是过早的优化)。

于 2012-07-30T22:31:26.603 回答
4

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

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

这一切都告诉我,有人不懂这种语言。

于 2012-07-30T23:04:11.923 回答
3

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

于 2012-07-30T22:24:48.730 回答
2

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

于 2012-07-30T22:09:25.470 回答