日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一分鐘理解Java包裝類型

Java 一直標(biāo)榜自己是一個純粹的面向?qū)ο笳Z言,自作聰明的為所有的值類型都提供相應(yīng)的引用類型。

為黔江等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及黔江網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、黔江網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

比如:int 類型對應(yīng)的有 Integer,前者是一個值,后者是一個引用。為了方便二者的轉(zhuǎn)換又一個叫“自動拆裝箱”的特性,把本來清晰的概念搞的亂七八糟。

一個優(yōu)秀的語言應(yīng)該語法簡單,語義單一、清晰。

本文討論它這些烏七八糟的概念(我也搞不懂),直接進(jìn)入正題——通過閱讀 JVM code 判斷究竟發(fā)生了什么。

解讀 class 文件

JVM 是一個棧式虛擬機(jī),它提供的指令都是圍繞著棧進(jìn)行的。通過javap -c 查看一個 class 文件中的 JVM 指令。

如下代碼,左邊是 Java 代碼右邊是它的 JVM code。

看一下每條指令執(zhí)行完后棧的變化:

bipush 把數(shù)字 20 直接 push 到棧

invokestatic 調(diào)用一個靜態(tài)方法在堆中構(gòu)造一個對象,然后把對象的地址壓入到棧

astore_1 把 Integer 對象的內(nèi)存地址記錄到一個內(nèi)部變量中(JVM 在堆中維護(hù)了一張大的變量表,代表變量名和變量值的關(guān)系,可以想象成 HashMap。)

至此,Integer = 20 這句代碼執(zhí)行完畢。緊接著看,bipush 把 10 壓入棧

asotre2 把變量 b 和棧中的 10 做關(guān)聯(lián)(放到變量表中)

總結(jié):

  • 值變量所指向的內(nèi)容(值)是放在棧中的,訪問時直接操作棧
  • 引用變量所指向的內(nèi)容(對象)是放在堆中的,訪問時先把變量載入到棧(通過aload_1 指令,例子中沒有出現(xiàn)),再操作。

訪問包裝對象時發(fā)生了什么

 
 
 
 
  1. Integer c = null; 
  2. Integer d = 10; 
  3. int e = c + d; 

JVM code 為

(1) 包裝對象的空指針問題

aconst_null 把一個空指針壓入棧,astore_1 把棧頂?shù)淖兞糠湃氲阶兞勘碇?,所以此時 a 是 null,所以會出現(xiàn)空指針錯誤。

(2) 包裝對象的計算方法

8-16 是計算兩數(shù)相加,aload_1 把變量表中的變量壓入棧,invokervirtual 指令把對象轉(zhuǎn)換成 int 重新入棧;12、13 行的邏輯也是如此。 16 行執(zhí)行整數(shù)相加。

因為計算結(jié)果是 int 類型,所以最后通過 isotre_3 放到變量表。

自己分析

如果代碼的最后一行寫作Integer e = c + d;,JVM code 會變成

自己動手分析一下看看吧。

總結(jié)

Java 的包裝數(shù)據(jù)類型非常蹩腳,這是它為了追求“表面的面向?qū)ο蟆倍冻龅拇鷥r。裝逼之勢如雷霆萬鈞,可怕。

【本文是專欄作者“邢森”的原創(chuàng)文章,轉(zhuǎn)載請聯(lián)系作者本人獲取授權(quán)】

戳這里,看該作者更多好文


新聞標(biāo)題:一分鐘理解Java包裝類型
網(wǎng)站路徑:http://m.5511xx.com/article/dpoiegi.html