天天看點

java中的引用和C++中的指針的差別

1.類型:引用其值為位址的資料元素,java封裝了的位址,可以轉成字元串檢視,長度可以不必關心。C++指針是一個裝位址的變量,長度一般是計算機字長,可以認為是個int。

2.所占記憶體: 引用聲明時沒有實體,不占空間。C++指針如果聲明後會用到才會指派,如果用不到不會配置設定記憶體。

3.類型轉換:引用的類型轉換,也可能不成功,抛異,或者IDE就不能通過。C++指針隻是個記憶體位址,指向那裡,對程式來說還都是一個位址,但可能所指的位址不是程式想要的!

4.初始值:引用初始值為java關鍵字null。C++指針是INT,如不初始化指針,那他的值就不是固定的了。

5.計算:引用是不可以計算的。C++指針是INT,是以他可以計算,是以經常用指針來代替數組下标。

6.控制:引用不可以計算,是以他隻能在自己程式裡,可以被控制。C++指針是記憶體位址,也可以計算,是以他有可能指向了一個不歸自己程式使用的記憶體位址,對于其他程式來說是很危險的,對自己程式來說也是不容易被控制的。

7.記憶體洩露:JAVA引用不會産生記憶體洩露。C++指針是容易産生記憶體洩露的,是以程式員要小心使用,及時回收。

8.作為參數:JAVA的方法參數隻是傳值,引用做為參數使用時候,回給函數内引用的值的COPY,是以在函數内交換兩個引用參數是沒意義的,因為函數隻交換的參數的COPY值,但在函數内改變一個引用參數的屬性是有意義的,因為引用參數的COPY所引用的對象是和引用參數是同一個對象。  C++指針做為參數給函數使用,實際上就是他所指的位址在被函數操作,是以函數内用指針參數的操作都将直接作用到指針所指向的位址(變量,對象,函數,等等)。

9.操作符和聲明:java裡用"."。C++指針用"->" 用"*"聲明指針。(似乎這條沒什麼用!)

10.本質:java中的引用和C++中的指針本質上都是想通過一個叫做引用或者指針的東西,找到要操作的目标(變量 對象等),友善在程式裡操作。所不同的是JAVA的辦法更安全,友善些,但沒有了C++的靈活,高效。

java中的引用和C++中的指針,他們最好不要混在一起,也不要認為是一回事,隻不過他們的作用有些相似,總叫人不自覺的對比。但在我們寫JAVA程式的時候最好忘記C++的指針,寫C++程式的時候,也不要老惦記着JAVA的引用。隻要記得 引用無大小,安全,不可計算,強轉時要小心就好了。

本文轉自 kome2000 51CTO部落格,原文連結:http://blog.51cto.com/kome2000/578411