在java中使用字符串初始化的运行时区别是什么?

时间:2012-06-28 11:25:35

标签: java performance

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

对于Exmaple:

String declare = null;

否则:

String declare = "";

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

4 个答案:

答案 0 :(得分:3)

String是一个对象。如果将其初始化为null,则告诉编译器您知道没有初始化,并且在您第一次尝试使用该变量时应该没有警告。除此之外,你当然指的是null的引用。

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

declare.equals("some string");

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

答案 3 :(得分:0)

正如@AljoshaBre评论的那样,这取决于你将如何处理它。将它初始化为null有点多余,因为初始值通常是这样。空白初始化(“”)使得如果你经历一个意外的路径(这可能是好的或坏的,因为它可能掩盖代码中的逻辑错误),就不可能收到空指针异常。

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