1
A
回答
6
此:
String s;
不會創建一個 「空字符串」,它只是一個未初始化的變量。
此:
s = "foo";
集,變量來引用一個String
對象。它是不可變的對象,而不是變量。
2
5
您需要了解變量和對象之間的差異。
考慮以下代碼:
String x = "hello";
for (int i = 0; i < 10; i++) {
x = x + i;
}
這最終將建立11串對象,但只有兩個變量參與(x
和i
)。在任何點處,的值的i
是整數(0-10)並且的值的x
是對String
的參考。 (這可能是null
過,但是偏偏沒有在這個例子中)。
明白x
不是一個對象是很重要的,也不是值x
對象。
如果它有助於把它在物理上,考慮我的家庭住址一張紙就可以了:
- 這張紙就像是變量 - 這是「某處可以存儲的值」。
- 寫在紙上的地址是一樣的參考 - 它是找到對象
- 房子本身就像是對象的一種方式。
這張紙或地址都不是房子本身。如果您在紙上擦寫地址並寫入其他地址,則不會對我的房屋進行任何更改 - 就像更改x
的值不會對示例代碼中的字符串對象本身所做的任何更改一樣。
相關問題
- 1. 在Java中File.canExecute()究竟做了什麼?
- 2. 當我在C++中執行buffer1.push_back(buffer2.front())時究竟發生了什麼?
- 3. Proc :: Background究竟發生了什麼?
- 4. 這是如何工作的?究竟發生了什麼?
- 5. Java中的JPanel發生了什麼?我究竟做錯了什麼?
- 6. 在android中的事務失敗後究竟發生了什麼?
- 7. 究竟是什麼觸發ng變化?
- 8. 當你在C中引用靜態變量時究竟發生了什麼?
- 9. 在telnet/SSH連接中究竟發生了什麼?
- 10. 當PictureBox.Visible設置爲True時,C#中究竟發生了什麼?
- 11. 在春季,究竟是什麼運行了quarz cron工作?
- 12. 在Rust中,究竟是什麼是可變的和不可變的借入?
- 13. 需要知道什麼在此代碼究竟發生
- 14. 字符數據究竟是什麼?
- 15. 怎麼看的混帳究竟發生了什麼合併
- 16. VHDL中的變量究竟是什麼?
- 17. visibleContentsAsDataURL究竟做了什麼?
- 18. KeyListener究竟做了什麼?
- 19. document.normalize究竟做了什麼?
- 20. MapView.preLoad()究竟做了什麼?
- 21. handleParkingUpdate()究竟做了什麼?
- 22. MIBCC.EXE究竟做了什麼?
- 23. UserTransactionManager究竟做了什麼
- 24. rbind.fill.matrix究竟做了什麼?
- 25. rangeOfCharacterFromSet究竟做了什麼?
- 26. Panel.IsItemsHost究竟做了什麼?
- 27. 「setContentView」究竟做了什麼?
- 28. fillMode究竟做了什麼?
- 29. .selectAll()究竟做了什麼?
- 30. JspFragment.invoke究竟做了什麼?
OH我看,謝謝 – Lucas 2012-03-24 21:42:44
我不會說這是一個未初始化的引用 - 我會說這是一個未初始化的*變量*。我喜歡在變量,引用和對象之間進行區分。 ('s'的*值*是初始化後的引用;'s'本身不是引用。) – 2012-03-24 21:46:58
@Jon:是的,這是一個重要的區別。措辭更新... – 2012-03-24 21:50:00