2012-03-24 114 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的值不會對示例代碼中的字符串對象本身所做的任何更改一樣。

相關問題