1. 程式人生 > >Java與C/C++比較——物件引用方面

Java與C/C++比較——物件引用方面

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會自動刪除並釋放無效引用,不用手動操作記憶體。具體的會在其它部落格說明。