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

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的引用。只要記得 引用無大小,安全,不可計算,強轉時要小心就好了。