成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java新手進階:細說引用類型

開發 后端
在Java中,引用類型的變量非常類似于C/C++的指針。本文為新手進階教程,為大家詳細介紹引用的類型。

為了形象起見,也為了打字方便,本文后面的內容,都把“引用類型的變量”稱為指針。所以,如果你原先有C/C++背景,今天講的內容對你來說應該很好理解;否則的話,可能要多琢磨琢磨了。

◆創建Java進階問題

假設我們在函數中寫了如下這個簡單的語句:

StringBuffer str = new StringBuffer("Hello world"); 

別看這個語句簡單,其實包含了如下三個步驟:  

首先,new StringBuffer("Hello world")在堆里申請了一坨內存,把創建好的StringBuffer對象放進去?! ?/P>

其次,StringBuffer str聲明了一個指針。這個指針本身是存儲在棧上的(因為語句寫在函數中),可以用來指向某個StringBuffer類型的對象。或者換一種說法,這個指針可以用來保存某個StringBuffer對象的地址?! ?/P>

***,當中這個等于號(賦值符號)把兩者關聯起來,也就是把剛申請的那一坨內存的地址保存成str的值。

◆引用對象之間的賦值、判相等

通過上述的圖解,大伙兒應該明白指針變量和該指針變量指向的對象是一個什么關系了吧。  

還是接著剛才的例子,再來看賦值的問題。對于如下語句:  

StringBuffer str2 = str;

這個賦值語句是啥意思捏?實際上就是把str的地址復制給str2,記住,是地址的復制,StringBuffer對象本身并沒有復制。所以兩個指針指向的是同一個東東。  

再搞一張示意圖,如下(今天畫這些圖把我累壞了):

明白了賦值,判斷相等的問題(就是==操作符)也就簡單了。當我們寫如下語句“if(str2 == str)”時,只是判斷兩個指針的值(也就是對象的地址)是否相等,并不是判斷被指向的對象是否內容相同。  

實際上兩個指針的值相同,則肯定是指向同一個對象(所以對象內容必定相同)。但是兩個內容相同的對象,它們的地址可能不一樣(比如克隆出來的多個對象之間,地址就不同)。

◆final常量的問題

針對引用類型變量的final修飾符也是很多人搞混淆的地方。實際上final只是修飾指針的值(也就是限定指針保存的地址不能變)。至于該指針指向的對象,內容是否能變,那就管不著了。所以,對于如下語句:  

final StringBuffer strConst = new StringBuffer();

你可以修改它指向的對象的內容,比如:  

strConst.append(" ");

但是不能修改它的值,比如:  

strConst = null;

◆傳參的問題

引用類型(在函數調用中)的傳參問題,是一個相當扯的問題。有些書上說是傳值,有些書上說是傳引用。搞得Java程序員都快成神經分裂了。所以,我們***來談一下“引用類型參數傳遞”的問題?! ?/P>

v還是拿剛才的例子,假設現在要把剛才創建的那一坨字符串打印出來,我們會使用如下語句:

System.out.println(str);這個語句又是什么意思捏?這時候就兩說了?! ?/P>

***種理解:可以認為傳進函數的是str這個指針,指針說白了就是一個地址的值,說得再白一點,就是個整數。按照這種理解,就是傳值的方式。也就是說,參數傳遞的是指針本身,所以是傳值的?! ?/P>

第二種理解:可以認為傳進去的是StringBuffer對象,按照這種理解,就是傳引用方式了。因為我們確實是把對象的地址(也就是引用)給傳了進去?! ?/P>

費了這么多口水,其實不論是傳引用還是傳值,都可以講得通,關鍵取決于你是如何看待參數所傳遞的東西。這就好比量子力學中“光的波粒二象性”,如果你以粒子的方式去測量它,它看起來像粒子;如果你以波動的方式去觀測它,它看起來像波動。假如你不太懂量子力學,前面這話當我沒說 :-)

【編輯推薦】

  1. 在 Java 類型中對稱設計的重要性
  2. Java社區對甲骨文收購Sun一事的看法
  3. 甲骨文收購Sun意在Java 成為企業市場蘋果
  4. IT職場培訓 程序員Java面試中的32個陷阱
  5. 4月17日外電頭條:Java 7將向細顆粒并行化發展
責任編輯:王觀 來源: 中國IT實驗
相關推薦

2021-03-08 09:00:00

Java編程內存

2010-02-04 14:41:52

Android菜單類型

2010-03-10 09:27:36

Linux鏈接文件類型

2024-05-20 08:58:13

Java引用類型垃圾回收器

2009-10-10 09:53:07

.NET值類型

2023-08-31 07:33:41

GopherCarolexcel

2009-08-14 17:09:48

C#引用類型

2011-07-11 14:36:05

JAVA

2009-08-19 16:39:44

C#值類型C#引用類型

2009-08-26 14:05:19

C#值類型和引用類型

2010-01-05 12:26:08

三層交換機基本特點

2021-08-27 07:47:06

引用類型

2009-08-27 16:39:26

C# String類型

2009-09-11 11:09:36

C#引用類型

2009-09-11 11:17:04

C#引用類型

2009-08-03 17:51:43

C#引用類型

2009-09-03 16:55:58

C#引用類型

2009-08-06 10:14:15

C#引用類型數組

2021-10-18 15:50:49

Android強引用軟引用

2009-12-03 09:59:20

JVM概念Java對象引用類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美一区二区三区久久人妖 | 国产一区二区不卡 | 日韩欧美在线观看视频 | 韩国精品在线观看 | 欧美一区二区三区电影 | 国产三级在线观看播放 | 人人人人爽| 在线不卡视频 | 欧美午夜在线 | 中文字幕在线电影观看 | 中文字幕在线播放第一页 | 皇色视频在线 | 午夜精品一区 | 在线成人免费视频 | 日韩欧美一区在线 | 狠狠躁夜夜躁人人爽天天高潮 | 午夜在线观看免费 | 久久婷婷香蕉热狠狠综合 | 九九热在线观看视频 | 国产一区二区三区免费观看视频 | 成人小视频在线免费观看 | 欧美一区二区成人 | 精品伦精品一区二区三区视频 | 亚洲精品99| 天天天天天天天干 | 水蜜桃亚洲一二三四在线 | 欧美 视频| 久久久久国产精品午夜一区 | 亚洲视频中文字幕 | 91精品国产综合久久小仙女图片 | 婷婷丁香在线视频 | 五月天天丁香婷婷在线中 | 亚洲精品久久久久久久久久久久久 | 九九热re | 毛片站| 国产一区二区免费 | 精品欧美一区二区三区久久久 | 99精品久久久 | 国产aaaaav久久久一区二区 | av毛片在线播放 | 精品三级在线观看 |