0

我需要知道使用运行时在java中初始化String的区别。

例如:

String declare = null;

否则:

String declare = "";

我声明了两种类型的字符串声明。哪一个最适合运行时声明。

4

4 回答 4

3

字符串是一个对象。如果你将它初始化为 null,你就是在告诉编译器你知道它没有被初始化,并且当你第一次尝试使用这个变量时不应该有任何警告。除此之外,当然,您指向的是对 null 的引用。

但是,如果将 String 初始化为空 String,则会发生以下情况:

  • 现在分配了一个 String 对象
  • 编译器会将该字符串文字放入字符串池中
  • 您初始化为 "" 的任何其他字符串都将指向该池中的相同不可变字符串

那么,问题是,如何处理代码中的 null 或空字符串?这应该指导你的决定

于 2012-06-28T11:31:26.663 回答
0

在第一种情况下,您创建了一个指向null对象的“指针”(未创建对象)。在第二个中 - 指向具有值“”(空字符串)的对象的“指针”。这些是完全不同的事情——你需要决定,你需要哪一个来进行进一步的操作。

于 2012-06-28T11:32:27.437 回答
0

第一个示例不会创建 String 对象,第二个示例会。所以,声明:

declare.equals("some string");

将为您的第一个示例生成 NullPointerException,但不会为第二个示例生成。

于 2012-06-28T11:32:46.640 回答
0

正如@AljoshaBre 评论的那样,这取决于您要使用它做什么。将其初始化为 null 有点多余,因为初始值通常就是这样。如果您经过意外的路径(这可能是好的或坏的,因为它可能掩盖代码中的逻辑错误),空白初始化 ("") 将无法接收空指针异常。

有一个初始值通常是好的,但要让它对使用你的字符串的代码有意义,而不是一个随机的初始值。

于 2012-06-28T11:32:54.723 回答