2012-03-24 111 views

回答

6

此:

String s; 

不会创建一个 “空字符串”,它只是一个未初始化的变量。

此:

s = "foo"; 

集,变量来引用一个String对象。它是不可变的对象,而不是变量。

+0

OH我看,谢谢 – Lucas 2012-03-24 21:42:44

+0

我不会说这是一个未初始化的引用 - 我会说这是一个未初始化的*变量*。我喜欢在变量,引用和对象之间进行区分。 ('s'的*值*是初始化后的引用;'s'本身不是引用。) – 2012-03-24 21:46:58

+0

@Jon:是的,这是一个重要的区别。措辞更新... – 2012-03-24 21:50:00

2

s当前没有分配给任何东西。

但是如果你有 - 如果你已经定义String s = "";然后s = "foo";,那么空字符串没有改变,但是变量s改为参考字符串"foo"而不是空字符串。

+0

没有空字符串[它从来没有创建] – amit 2012-03-24 21:42:48

+0

这是更好吗? – 2012-03-24 21:44:39

+0

是的,更好,更准确。对于在细节上如此挑剔我感到抱歉 - 我相信这一点对于java初学者很重要。 – amit 2012-03-24 21:46:08

5

您需要了解变量对象之间的差异。

考虑以下代码:

String x = "hello"; 
for (int i = 0; i < 10; i++) { 
    x = x + i; 
} 

这最终将建立11串对象,但只有两个变量参与(xi)。在任何点处,的值i是整数(0-10)并且的值x是对String的参考。 (这可能是null过,但是偏偏没有在这个例子中)。

明白x不是一个对象是很重要的,也不是x对象

如果它有助于把它在物理上,考虑我的家庭住址一张纸就可以了:

  • 这张纸就像是变量 - 这是“某处可以存储的值”。
  • 写在纸上的地址是一样的参考 - 它是找到对象
  • 房子本身就像是对象的一种方式。

这张纸或地址都不是房子本身。如果您在纸上擦写地址并写入其他地址,则不会对我的房屋进行任何更改 - 就像更改x的值不会对示例代码中的字符串对象本身所做的任何更改一样。

相关问题