Java的引用和C++的指針有什麼區別

Java的引用和C++的指針有什麼區別

Java的引用和C++的指針都是指向一塊內存地址的,通過引用或指針來完成對內存數據的操作。但是它們在實現、原理、作用等方面卻有區別。

(1)類型:引用其值爲地址的數據元素,Java封裝了的地址,可以轉成字符串查看,長度可以不必關心。C++指針是一個裝地址的變量,長度 一般是計算機字長,可以認爲是個int。
(2)所佔內存:引用聲明時沒有實體,不佔空間。C++指針如果聲明後會用到 纔會賦值,如果用不到不會分配內存。
(3)類型轉換:引用的類型轉換,也可能不成功,運行時拋異常或者編譯就不能通過,C++指針只是個內存地址,指向哪裏,對程序來說還都是 一個地址,但可能所指的地址不是程序想要的。
(4)初始值:引用初始值爲java關鍵字null。C++指針是int,如不初始化指針 那它的值就不是固定的了,這很危險。
(5)計算:引用是不可以計算的。C++指針是int,它可以計算,如++或–,所 以經常用指針來代替數組下標。
(6)控制:引用不可以計算,所以它只能在自己程序中,可以被控制。C++指針是內存地址,也可以計算,所以它有可能指向了一個不屬於自己程序使用的內存地址,對於其他程序來說是很危險的,對自己程序來說也是不容易被控制的。
(7)內存泄露:Java引用不會產生內存泄露。C++指針是容易產生內存泄露 的,所以程序員要小心使用,及時回收。
(8)作爲參數:Java的方法參數只是傳值,引用作爲參數使用時,回給函數內引用的值的COPY,所以在函數內交換兩個引用參數是沒意義的,因爲函數只交換參數的COPY值,但在函數內改變一個引用參
數的屬性是有意義的,因爲引用參數的COPY所引用的對象是和引用參數是同一個對象。C++指針作爲參數給函數使用,實際上就是它所指的地址在被函數操作,所以函數內使用指針參數的操作都將直接作用到指針所指向的地址(變量,對象,函數等)。


總的來說,Java中的引用和C++中的指針本質上,都是想通過一個叫做引用或者指針的東西,找到要操作的目標,方便在程序中操作。所不同的是Java的辦法更安全和方便一些,但沒有C++的那麼靈活,也算是對指針的一種包裝和改進。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章