北京北大青鳥(niǎo)學(xué)校淺析:java與指針

      北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部老師介紹:JAVA不是沒(méi)有指針,而是對(duì)指針進(jìn)行了偽裝:在使用上泛化、強(qiáng)化和簡(jiǎn)單化,在概念上淡化和弱化……

      我們知道,C++中可以有對(duì)象類(lèi)型的變量和對(duì)象指針類(lèi)型,兩者的區(qū)別如下: Object oo = Object(); Object * oop = new Object(); 也就是說(shuō)當(dāng)使用new方式時(shí),是動(dòng)態(tài)為對(duì)象分配內(nèi)在并將地址賦給oop這個(gè)指針變量。

      而JAVA中只有一種相關(guān)類(lèi)型:對(duì)象類(lèi)型,可是它的表現(xiàn)形式卻是這樣的: Object oo = new Object(); 比較一下,原來(lái)它就是使用了C++的動(dòng)態(tài)內(nèi)在分配方式創(chuàng)建了一個(gè)對(duì)象,并把地址返回給了oo變量,也就是說(shuō)oo本質(zhì)上就是一個(gè)指針變量。

      北京北大青鳥(niǎo)學(xué)校老師引申一下:JAVA中的對(duì)象類(lèi)型本質(zhì)上應(yīng)該叫做對(duì)象指針類(lèi)型。那么傳統(tǒng)的對(duì)象類(lèi)型呢?在JAVA里已經(jīng)不見(jiàn)了蹤影!因此,北京北大青鳥(niǎo)學(xué)校老師認(rèn)為,既然沒(méi)有了傳統(tǒng)的對(duì)象類(lèi)型,那么對(duì)象指針變量前面的*也就可以不要了。對(duì)象指針變量也就可以簡(jiǎn)稱(chēng)為對(duì)象變量了,反正也不會(huì)和其它概念混淆!

      所有的對(duì)象變量都是指針,沒(méi)有非指針的對(duì)象變量,想不用指針都不行,這就是指針的泛化和強(qiáng)化。不叫指針了,就叫對(duì)象變量,這就是概念上的淡化和弱化。

      沒(méi)有了指針的加減運(yùn)算,也沒(méi)有了*、->等運(yùn)算符,這是對(duì)指針的簡(jiǎn)單化。

      北京北大青鳥(niǎo)學(xué)校老師介紹,這可以從很多方面得到驗(yàn)證。首先,JAVA強(qiáng)調(diào)所有的對(duì)象賦值和傳遞都是引用,

      北京北大青鳥(niǎo)學(xué)校詳解:Object a=new Object(); 并不是將新生成的對(duì)象賦給a,a是對(duì)新生成對(duì)象的引用。 Object a=new Object(); Object b; b=a; b并不是一個(gè)新對(duì)象,它是對(duì)a對(duì)象的引用。

      有些學(xué)員可能會(huì)認(rèn)為很復(fù)雜。北京北大青鳥(niǎo)學(xué)校老師重申,其實(shí),a是指針,b也是指針,將a的值賦給b,也就是將a所存儲(chǔ)的地址賦給b,b自然指向了a所指向的對(duì)象。

      其實(shí),JAVA強(qiáng)調(diào)兩個(gè)對(duì)象的相等比較不是比較兩個(gè)對(duì)象的值是否相同,是比較兩個(gè)對(duì)象是不是相同的引用。

      北京北大青鳥(niǎo)學(xué)校詳解: Object a=new Object(); Object b=a; a==b為真,兩個(gè)對(duì)象引用相同。 String a=new String("abc"); String b=new String("abc"); a==b為假,兩個(gè)對(duì)象引用不同。不太明白是吧--其實(shí)呢,==的意義并沒(méi)有變。a是指針,b也是指針,a、b存儲(chǔ)的都是地址,當(dāng)兩個(gè)變量存儲(chǔ)了同一個(gè)對(duì)象的地址時(shí),這兩個(gè)地址當(dāng)然相等,a==b自然是真。當(dāng)兩個(gè)變量存儲(chǔ)了不同對(duì)象的地址,這兩個(gè)地址值當(dāng)然不同,a==b自然為假。

      最后,再看看鏈表的問(wèn)題,用C做例子吧(可以移植到C++): struct linktable{ int a; float b; struct linktable c; } 是不行的,因?yàn)樵诙xc時(shí)需要確定它要占用的內(nèi)存,struct linktable還沒(méi)有定義完,沒(méi)法確定,象下面這樣做吧: struct linktable{ int a; float b; struct linktable * c; } c是指針,它占用的內(nèi)存大小是固定的,與它指向的數(shù)據(jù)類(lèi)型的空間無(wú)關(guān),因此可以確定。再看JAVA,號(hào)稱(chēng)沒(méi)指針也能做鏈表: class linktable{ int a; float b; linktable c; } 好厲害!其它也沒(méi)什么,北京北大青鳥(niǎo)老師介紹,JAVA的對(duì)象變量實(shí)質(zhì)上就是指針變量,c就是個(gè)指針: linktable c; 和 struct linktalbe * c; 本質(zhì)上完全相同!(北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部提供)

      北大青鳥(niǎo)網(wǎng)上報(bào)名
      北大青鳥(niǎo)招生簡(jiǎn)章
      主站蜘蛛池模板: 精品欧洲AV无码一区二区男男| 国产在线一区二区三区| 国产天堂一区二区综合| 久久久久人妻一区精品性色av| 国产在线视频一区二区三区98| 一区二区三区在线免费| 亚洲国产成人久久一区久久| 国产一区二区三区精品视频| 国产成人一区二区三区在线观看| 无码少妇一区二区| 亚洲国产视频一区| 亚洲色一区二区三区四区| 日本精品高清一区二区2021| 国产一区二区三区露脸| 伊人激情AV一区二区三区| 亚洲av无码一区二区三区网站 | 一区二区三区精品高清视频免费在线播放 | 国产亚洲一区二区精品| 久久国产精品一区| 国产精品第一区第27页| 国产成人精品久久一区二区三区av | 亚洲AV无一区二区三区久久| 国产在线精品一区免费香蕉 | 亚洲色精品三区二区一区| 亚洲一区二区三区免费观看| 2022年亚洲午夜一区二区福利 | 国产一区二区在线|播放| 日韩成人一区ftp在线播放| 国产高清在线精品一区小说| 亚洲AV无码一区二区三区在线观看| 无码av不卡一区二区三区| 国产韩国精品一区二区三区| 国产av天堂一区二区三区| 国产精品日本一区二区不卡视频 | 国产精品女同一区二区| 91精品国产一区二区三区左线| 国产福利一区二区三区在线视频 | 美女AV一区二区三区| 无码人妻精品一区二区三区99仓本 | 韩国一区二区三区视频| 精品综合一区二区三区|