Java的引用和C++的指針都是指向一塊內存地址的,經過引用或指針來完成對內存數據的操做,就好像風箏的線軸同樣,經過線軸老是可以找到風箏,可是它們在實現,原理做用等方面卻有區別。java
(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++指針做爲參數給函數使用,實際上就是它所指的地址在被函數操做,因此函數內使用指針參數的操做都將直接做用到指針所指向的地址(變量,對象,函數等)。字符串