C++,Java 指針,引用概念

首先我們來想一個問題,在Java的函數(shù)傳參中,到底傳的是值or引用?

比如

1. public void? printMessage(int i)

外部調(diào)用? printMessage(a)


2. public void printMessage(User u)

外部調(diào)用 printMessage(user)

1.如果這個時候我在函數(shù)里改變 i的內(nèi)容,那么外面的a 肯定不會變

2.如果這個時候我在函數(shù)里改變 u的內(nèi)容,比如u.setGender("女") 那么外面的u.gender 如果是"男"? 這個時候肯定會變成女

這里不懂的、不信的你就試一下。

為什么呢?

Java中函數(shù)的形參,不管是基本變量還是對象類型變量,傳遞的都是一個拷貝。

基本變量的拷貝傳遞過去,改變不會影響原來的變量。因為變量復(fù)制一份

但是對象類型傳遞的是一份引用拷貝,引用在Java中就是指向某個指針(地址),副本引用的變化直接影響外面的對象也就不奇怪了。

再說一下C++ 里面的指針概念,指針恰恰就解決了另外的問題,拿地址來操作數(shù)據(jù)(Java只能拿引用來操作)

咱們看到的代碼?

int a ;

int *p;

p = &a ;

p是存儲指針的變量,里面的值是地址,是可變的。

但是a 是一個引用。 引用可以理解在 內(nèi)存上打的一個標(biāo)簽, 這個引用所指向的地址是不可變的。 舉個例子 a指向內(nèi)存地址為 0x01的,不可能通過編程手法變成 a指向了內(nèi)存地址為0x02的。 只可能改變a里面的值,也就是地址0x01里面的數(shù)據(jù)域

所以大概圖形是這樣子的


大伙明白了嗎?

還記得上面那句話嗎,Java只能拿著引用(a)來操作數(shù)據(jù),但是C++可以拿著地址(p) 來操作數(shù)據(jù)。

Java去掉了指針概念,簡化了程序難度,理解難度,被更多程序員所接受。

但是Java依舊保留了引用概念,也是根本去不掉的。Halal Madrid!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,242評論 0 7
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,116評論 0 12
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,590評論 0 6
  • 2017年5月26日 農(nóng)歷五月初一 星期五 【早睡早起】 昨晚10:30睡,今早4:00起床。 【學(xué)佛】 1.禮...
    陳境墨閱讀 351評論 0 0
  • Git使用的人越來越多,它是一個非常好的版本控制軟件,GitHub就是一個使用Git作為版本控制的一個遠(yuǎn)程倉庫,上...
    welooooo閱讀 370評論 0 0

友情鏈接更多精彩內(nèi)容