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

一分鐘理解Java包裝類型

開發 開發工具 后端
Java 一直標榜自己是一個純粹的面向對象語言,自作聰明的為所有的值類型都提供相應的引用類型。本文我們直接進入正題——通過閱讀 JVM code 判斷究竟發生了什么。

Java 一直標榜自己是一個純粹的面向對象語言,自作聰明的為所有的值類型都提供相應的引用類型。

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

一個優秀的語言應該語法簡單,語義單一、清晰。

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

解讀 class 文件

JVM 是一個棧式虛擬機,它提供的指令都是圍繞著棧進行的。通過javap -c <className>查看一個 class 文件中的 JVM 指令。

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

解讀 class 文件

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

bipush 把數字 20 直接 push 到棧

invokestatic 調用一個靜態方法在堆中構造一個對象,然后把對象的地址壓入到棧

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

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

asotre2 把變量 b 和棧中的 10 做關聯(放到變量表中)

總結:

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

訪問包裝對象時發生了什么

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

JVM code 為

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

aconst_null 把一個空指針壓入棧,astore_1 把棧頂的變量放入到變量表中,所以此時 a 是 null,所以會出現空指針錯誤。

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

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

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

自己分析

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

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

總結

Java 的包裝數據類型非常蹩腳,這是它為了追求“表面的面向對象”而付出的代價。裝逼之勢如雷霆萬鈞,可怕。

【本文是51CTO專欄作者“邢森”的原創文章,轉載請聯系作者本人獲取授權】

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

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2018-06-26 05:23:19

線程安全函數代碼

2017-02-21 13:00:27

LoadAverage負載Load

2018-07-31 16:10:51

Redo Undo數據庫數據

2017-03-30 19:28:26

HBase分布式數據

2018-06-28 14:00:01

分布式集群架構

2018-06-26 10:52:45

2017-07-06 08:12:02

索引查詢SQL

2020-05-21 19:46:19

區塊鏈數字貨幣比特幣

2022-07-18 06:16:07

單點登錄系統

2018-07-31 15:05:51

Java公平鎖線程

2011-02-21 17:48:35

vsFTPd

2020-07-17 07:44:25

云計算邊緣計算IT

2016-09-12 17:28:45

云存儲應用軟件存儲設備

2020-07-09 07:37:06

數據庫Redis工具

2020-06-11 08:04:12

WDMDWDMMWDM

2013-11-15 07:24:50

4G LTE圖解

2016-12-16 11:05:00

分布式互斥線程

2018-03-27 09:28:33

緩存策略系統

2015-11-12 10:32:40

GitHub控制系統分布式

2021-08-06 08:50:45

加密貨幣比特幣區塊鏈
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久网站 | 欧美日日日日bbbbb视频 | 日韩av啪啪网站大全免费观看 | 日韩在线观看一区 | 免费久久精品 | 欧美一级免费观看 | 欧美一区免费 | 日韩一区二区在线免费观看 | 精品欧美一区二区在线观看 | 日韩综合网 | 中文字幕第100页 | 久久国产精品一区二区三区 | 国产美女黄色 | 在线天堂免费中文字幕视频 | 日韩高清国产一区在线 | 欧美专区在线 | 国产精品国产精品国产专区不片 | 成人欧美一区二区三区在线观看 | 欧美精品一区二区在线观看 | 欧美小视频在线观看 | 亚洲国产精品一区在线观看 | 国产精品自产拍 | 中文字幕av第一页 | 操操日 | 日本精品在线播放 | 男人天堂免费在线 | 亚洲一区二区三区在线播放 | 成人在线精品视频 | 久久久久99 | 久久精品久久久久久 | 国产福利网站 | 日韩中文视频 | 成人免费看片网 | 91视在线国内在线播放酒店 | 国产综合在线视频 | 日韩精品在线观看视频 | 美女操网站 | 日本a∨精品中文字幕在线 亚洲91视频 | 亚洲第一成年免费网站 | 性色视频 | 精品在线一区二区 |