Java與C/C++比較——物件引用方面
阿新 • • 發佈:2019-02-04
Java與C/C++的比較
一提到Java與C/C++的不同,很多人首先想到的是Java沒有指標。本文就是探討一下這個不同
Java沒有指標,但只是沒有顯式指標,其實Java的指標無處不在。
Java的基本資料型別的引用與C/C++類似,但物件的引用與C/C++完全不同.
- 以
'public class Example{}'
為例 ` Example example ; //宣告物件Example
在C/C++中會直接申請一個記憶體空間來存放example例項,而在Java中,example申請的記憶體空間只存放一個指向真正存放example的空間的記憶體地址。也就是說Java宣告的其實是一個”指標”,我們稱之為引用(我感覺引用這個詞比指標容易理解多了)。
- Java宣告的是引用!
- Java宣告的是引用!
- Java宣告的是引用!
- 這個很重要,之後幾條靠這個理解就很簡單。
- 以
Java引用聲明後如果沒初始化(new 一下),則引用指向null(無引用,不分配儲存空間)。而C/C++還是會分配記憶體。但C/C++也可如同Java一般,需用&符顯式標明。
對於
Example example1=example;
Java是將因引用(地址)example複製給example1,不是將物件實體複製到example1,而C/C++不同參考上一條,對於
example1==example
Java判斷的是example1與example是否是同一引用。即是否是同一個物件(地址相同),而C/C++判斷的是是否為相同的物件(內容相同)。Java想判斷內容相同需要函式equals();
C/C++用指標在方法間傳遞引數,從而避免拷貝物件,而Java直接傳遞引用就可以。
Java會自動刪除並釋放無效引用,不用手動操作記憶體。具體的會在其它部落格說明。