1. 程式人生 > >java引用和指標的區別

java引用和指標的區別

Java的引用和C++的指標的區別
Java的引用和C++的指標都是指向一塊記憶體地址的,通過引用或指標來完成對記憶體資料的操作,就好像風箏的線軸一樣,通過線軸總是能夠找到風箏,但是它們在實現,原理作用等方面卻有區別。


(1)型別:引用其值為地址的資料元素,Java封裝了的地址,可以轉換成字串檢視,長度也可以不必擔心。C++指標是一個裝地址的變數,長度一般是計算機字長,可以認為是個int。


(2)所佔記憶體:引用宣告時沒有實體,不佔空間。C++指標如果宣告之後會用到才會賦值。如果用不到不會分配記憶體。


(3)型別轉換:引用的型別轉換,也可能不成功,執行時拋異常或者編譯就不能通過。C++指標指示個記憶體地址,指向記憶體,對程式來說還都是一個地址,但可能所指的地址不是程式想要的。


(4)初始值:引用初始值為java關鍵字null。C++指標是int,如不初始化指標,那它的值就不是固定的了,這很危險。


(5)計算:引用不可以計算。C++指標是int,他可以計算,如++或--,所以經常用指標來代替陣列下標。


(6)記憶體洩露:Java引用不會產生記憶體洩露。C++指標是容易產生記憶體洩露的,所以程式設計師要小心使用,及時回收。


(7)作為引數:Java的方法引數只是傳值,引用作為引數使用時,會給函式內引用的值的COPY,所以在函式內交換倆個引用引數是沒意義的,因為函式只交換引數的COPY值,但在函式內改變一個引用引數的屬性是有意義的,因為引用引數的COPY所引用的物件時和引用引數是同一個物件。C++指標作為引數給函式使用,實際上就是它所指的地址在被函式操作,所以函式內使用指標引數的操作都將直接作用到指標所指向的地址(變數,物件,函式等)。