不初始化String vs. Making null String稍后创建另一个对象?

时间:2015-03-17 21:32:42

标签: java string

如果我创建了一个字符串并且没有初始化该值。我们是使用相同的字符串对象还是将字符串引用重新分配给新字符串,这可能看起来像更改值。

class Foo()
{
String x;
String y = null;

x = "Hello";
y = "Hey";
}

我现在的理解是x不会创建额外的String对象。但是y会创建另一个String但是会将它从null String重新分配给新创建的字符串"嘿"。这是对的吗?

3 个答案:

答案 0 :(得分:1)

String foo

本身只是一个参考。由于它是一个String-reference,因此它能够引用一个名为' String Pool'的字符串,这是String Intering的一个实现。但是会创建一个新的字符串

也没有
String bar = null;

字符串bar就像foo一样,是一个String 引用,但是创建引用不会创建新的Object。 foobar之间的区别在于bar是null的assignet,但null肯定不是String,因此JVM没有理由创建新的String。

你最后的假设更接近实际发生的事情。

String foo = "Hello World";

会创建一个新的String(假设" Hello World"在String Pool中找不到)。
你可以将这个陈述分成三个较小的陈述:

  1. 创建参考
    String foo创建一个能够引用字符串对象的新引用
  2. 创建对象
    "Hello World",作为new String("Hello World")的简短形式在对象堆上分配空格(在本例中为字符串池)并实际创建新对象。
  3. 作业
    =最终将我们的对象分配给我们的参考。
  4. 总结一切:

    String x;
    String y = null;
    

    将创建一个新的String。但这两个陈述都将

    x = "Hello";
    y = "Hey";
    

答案 1 :(得分:0)

字符串在Java中是不可变的。两者:x ="你好"和y ="嘿"无论x和y是如何声明的,都将创建一个新的String对象。

答案 2 :(得分:0)

您需要了解变量和对象之间的区别。

String x是一个可以引用String对象的变量。声明变量不会创建对象。

"Hello"是一个String对象。

相关问题