真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javap怎么解析Java整型常量和整型變量

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)javap怎么解析Java整型常量和整型變量,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、靈璧網(wǎng)絡(luò)推廣、小程序開發(fā)、靈璧網(wǎng)絡(luò)營(yíng)銷、靈璧企業(yè)策劃、靈璧品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供靈璧建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

我下圖代碼第五行和第九行分別定義了一個(gè)整型變量和一個(gè)整型常量:

static final int number1 = 512;
static int number3 = 545;

Java程序員都知道兩者的區(qū)別。

javap怎么解析Java整型常量和整型變量

下面我們就用javap將.class文件反編譯出來然后深入研究Java里整型變量和整型常量的區(qū)別。

使用命令行javap -c constant.ConstantFolding查看.class文件反編譯出來的字節(jié)碼:

javap怎么解析Java整型常量和整型變量

結(jié)果:

javap怎么解析Java整型常量和整型變量

這些字節(jié)碼指令的說明,在wikipedia里有說明:

wiki: https://en.wikipedia.org/wiki...

咱們Java程序員不需要把它們都背下來,只需要把這個(gè)網(wǎng)頁(yè)收藏起來,要用的時(shí)候當(dāng)成字典來用就行:

javap怎么解析Java整型常量和整型變量

sipush 545: 將整數(shù)545放置到棧上

putstatic #16:

將棧上的值545賦給當(dāng)前類的靜態(tài)字段里。

javap怎么解析Java整型常量和整型變量

那么putstatic #16里的#16代表什么含義?

我們?cè)儆胘avap -v 參數(shù)反編譯,就能看到這個(gè)類的常量池(Constant pool). 大家看下圖藍(lán)色高亮的一行:

constant/ConstantFolding.number3:I

說明#16代表類constant.ConstantFolding的成員number3,類型為I。

javap怎么解析Java整型常量和整型變量

至此,這兩行字節(jié)碼指令聯(lián)合起來,實(shí)際對(duì)應(yīng)了我們寫的Java代碼:

static int number3 = 545;

我們繼續(xù)分析javap反編譯出來的字節(jié)碼。

javap怎么解析Java整型常量和整型變量

aload_0: 將序號(hào)為0的本地變量的引入加載到棧上

invokespecial: 調(diào)用對(duì)象實(shí)例上的成員方法,如果有返回值,方法的返回值存儲(chǔ)到棧上。具體調(diào)用的方法由#標(biāo)識(shí),可在常量池中查詢到對(duì)應(yīng)的方法名。

ldc: 將常量池上代號(hào)為#<數(shù)字>的常量的值從常量池加載到棧上。

我們從下圖的常量池列表能發(fā)現(xiàn),序號(hào)為#29的常量318976正是整型常量number1(512)和整型常量(623)的積。由此可以看出, number1 * number2這個(gè)表達(dá)式,因?yàn)閰⑴c運(yùn)算的兩個(gè)操作數(shù)通過STATIC和FINAL修飾成為了整型常量,因此其積在編譯期就能得到,所以編譯器在編譯時(shí)就計(jì)算出來,存儲(chǔ)在變量池里,序號(hào)為#29。

javap怎么解析Java整型常量和整型變量

那么整型變量做乘法運(yùn)算,對(duì)應(yīng)的字節(jié)碼又是什么樣的呢?

從下圖序號(hào)為3的code開始:

getstatic #16: 將類的靜態(tài)成員#16加載到棧上。#16對(duì)應(yīng)的成員為number3,值為545。

getstatic #18: 將類的靜態(tài)成員#18加載到棧上。#18對(duì)應(yīng)的成員為number4,值為619。

imul: 執(zhí)行棧上兩個(gè)整數(shù)的乘法運(yùn)算。

istore_2: 將結(jié)果保存到局部變量2里。

此時(shí),我們Java代碼里的int product2 = number3 * number4就執(zhí)行完了。

大家看到的剩下的藍(lán)色字節(jié)碼,都對(duì)應(yīng)了下面這行打印語(yǔ)句。

System.out.println("Value: " + product1 + " , " + product2);

從這些字節(jié)碼也能看出,Java里我們直接用加號(hào)進(jìn)行字符串拼接操作,Java編譯器在編譯時(shí),自動(dòng)使用了StringBuilder進(jìn)行優(yōu)化。

既然整型變量的乘積需要打印出來,因此字節(jié)碼的iload_2將之前用istore_2保存在局部變量2中的計(jì)算結(jié)果又加載到棧上,這樣乘積結(jié)果最后就能輸出了。

javap怎么解析Java整型常量和整型變量

上述就是小編為大家分享的javap怎么解析Java整型常量和整型變量了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前文章:javap怎么解析Java整型常量和整型變量
標(biāo)題URL:http://weahome.cn/article/pipicp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部