Java中 強調: 一切都是對象
儘管如此 但是操縱的標識符實際上是對象的一個引用 借用THINKING IN JAVA 書中的例子 :
對象作爲電視機 引用就作爲遙控器 只要握有這個遙控器 就可以保持與電視機的聯繫 當想改變頻道時 實際上操縱的是遙控器,
再由遙控器來調控電視機(對象)
此外 ,引用也可以獨立存在,如: String sl; 這裏只是創建了引用 並不是對象
如何將引用和一個新的對象關聯呢 用 new 關鍵字
比如: String s = new String("asdf");
還有一個重要的概念 ,Java 中所有的對象都要通過對象引用訪問 也就是每個對象得存在一個引用
那麼,對象 或 引用 存儲在什麼地方了呢 ?
首先,有五個不同的地方可以存儲數據;
1)寄存器:它直接位於處理器內部 Java中不能直接控制寄存器
2)堆棧 :位於通用RAM(隨機存儲器)中,通過堆棧指針可以從處理器獲得直接支持,堆棧指針向下移動,則分配新的內存,若向上移動,則釋放內存,這樣做十分高效。
但是創建程序時,Java系統必須知道堆棧中所有項的確切生命週期,這一約束限制了程序的靈活性。 基本類型和對象引用就存在其中,但Java對象除外。
3)堆 :一種通用的內存池(也位於RAM), 用於存放所有的Java對象 。缺點就是爲了靈活性而增加了時間.
4)常量存儲: 通常直接存在程序代碼內部,這樣做是安全的 ,因爲它們永遠不會被改變。
5)非RAM存儲:兩個基本的例子就是 流對象 和 持久化對象。流對象中,對象被轉化爲字節流; 持久化對象中,對象被存在與磁盤上,如數據庫。
所以說對象引用是指向對象存儲所在堆中的某個區域的指針