国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用javap分析Java的字符串操作

asce1885 / 659人閱讀

摘要:使用命令行將包含了這行代碼的類反編譯查看其字節碼我們看到字符串被編譯器加到了常量池里。代碼被翻譯成了下面兩句字節碼首先底層的原生方法被調用,生成的內部存儲實現。做一個字符串拼接的操作。

我們看這樣一行簡單的字符串賦值操作的Java代碼。

String a = "i042416";

使用命令行將包含了這行代碼的Java類反編譯查看其字節碼:

javap -v constant.ConstantFolding

我們看到字符串 "i042416" 被Java編譯器加到了常量池里。

Java代碼 String a = "i042416"被翻譯成了下面兩句字節碼:

ldc #16: 首先JVM底層的原生方法StringTable::intern被調用,生成String的內部存儲實現char[]。然后執行ldc #16, 將常量池內的代號為#16的常量加載到棧上,即i042416。

2. astore_1:將"i042416"的引用存儲到序號為1的本地變量中(即我們代碼中的局部變量a)。

下面再看一個稍微復雜一點的例子。

做一個字符串拼接的操作。

String aa1 = "i042416";

String aa2 = "jerrywang";

String aa3 = "i042416" + "jerrywang";

可以看到,在編譯階段,編譯器字節把兩個字符串常量的值進行拼接,結果"i042416jerrywang"存儲到變量aa3中, 作為一個新的字符串常量, 在常量池中代號為#21。

因此,變量aa1和aa3實際上指向常量池中的同一個常量,因此直接用==比較也返回true。

String aa1 = "i042416jerrywang";

String aa2 = "jerrywang";

String aa3 = "i042416" + "jerrywang";

System.out.println(aa1 == aa3);

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71811.html

相關文章

  • 使用javap深入理解Java整型常量和整型變量區別

    摘要:我下圖代碼第五行和第九行分別定義了一個整型變量和一個整型常量程序員都知道兩者的區別。下面我們就用將文件反編譯出來然后深入研究里整型變量和整型常量的區別。 我下圖代碼第五行和第九行分別定義了一個整型變量和一個整型常量: static final int number1 = 512; static int number3 = 545; Java程序員都知道兩者的區別。 showImg(ht...

    Mr_houzi 評論0 收藏0
  • javap命令與Java Dcompiler工具、IDEA自帶反編譯器反編譯結果差別及原因

    摘要:反匯編器與反編譯器不同,反編譯器的目標是高級語言而非匯編語言。反匯編器的反匯編輸出通常格式化為適合人類閱讀,而非用作匯編器的輸入源,因此它主要是一個逆向工程工具。本文章參考了通過命令分析匯編指令反匯編器 問題描述 寫這篇文章是為了記錄我這幾天遇到的一個疑惑,并且順藤摸瓜的學習一下javap命令。遇到的疑惑是這樣的:我在看使用枚舉類型實現單列模式的博客時,發現一些博客中寫到的枚舉類型的反...

    張憲坤 評論0 收藏0
  • 一個簡單例子教會您使用javap

    摘要:從字節碼的分析可以觀察到一個有趣的現象,再次看看我們的語句。這張表里每行的后面的數字代表源代碼的序號,冒號后面的數字代表字節碼里每行指令的序號。維護了源代碼同字節指令的映射關系,確保了代碼調試的順利進行。 javap是JDK自帶的工具: showImg(https://segmentfault.com/img/remote/1460000016730237); 這篇文章使用下面這段簡單...

    BLUE 評論0 收藏0
  • 從指令角度看"abc"和new String("abc")

    摘要:但是有一個的指令,可以把字節碼翻譯成人類能看懂的東西。是文件分解器,可以反編譯即對編譯的文件進行反編譯,也可以查看編譯器生成的字節碼。現在有一個類,定義入下先用編譯成字節碼,再使用進行反編譯。 概要 Java工程師面試官偏愛的問題之一,就是abc和 new String(abc)的區別是什么?回答的比較好的會帶出Java堆,棧,常量池,引用等概念。但今天不止如此,我們從指令的角度,去看...

    doodlewind 評論0 收藏0
  • 為何Spring MVC可獲取到方法參數名,而MyBatis卻不行?【享學Spring MVC】

    每篇一句 胡適:多談些問題,少聊些主義 前言 Spring MVC和MyBatis作為當下最為流行的兩個框架,大家平時開發中都在用。如果你往深了一步去思考,你應該會有這樣的疑問: 在使用Spring MVC的時候,你即使不使用注解,只要參數名和請求參數的key對應上了,就能自動完成數值的封裝 在使用MyBatis(接口模式)時,接口方法向xml里的SQL語句傳參時,必須(當然不是100%的必須,...

    孫淑建 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<