91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中"abc"和new String("abc")有哪些區別

發布時間:2020-09-09 10:19:21 來源:億速云 閱讀:163 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Java中"abc"和new String("abc")有哪些區別,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Java工程師面試官偏愛的問題之一,就是"abc"和 new String("abc")的區別是什么?回答的比較好的會帶出Java堆,棧,常量池,引用等概念。但今天不止如此,我們從指令的角度,去看這個問題。

正文

我們知道,java類編譯后的字節碼是個二進制文件,不是給人而是給機器閱讀的。但是java有一個javap的指令,可以把字節碼翻譯成人類能看懂的東西。

javap是 Java class文件分解器,可以反編譯(即對javac編譯的文件進行反編譯),也可以查看java編譯器生成的字節碼。用于分解class文件。

現在有一個類,定義入下

public class A01 {
    public static void main(String ... args){
        String a = "123";
        String c = new String("123");
    }
}

先用javac A01.java編譯成字節碼,再使用javap -c A01.class進行反編譯。得到入下文本

Compiled from "A01.java"
public class javap.A01 {
  public javap.A01();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String...);
    Code:
       0: ldc           #2                  // String 123
       2: astore_1
       3: new           #3                  // class java/lang/String
       6: dup
       7: ldc           #2                  // String 123
       9: invokespecial #4                  // Method java/lang/String."<init>":(Ljava/lang/String;)V
      12: astore_2
      13: return
}

我們主要看下面這段關于main方法的文本,里面涉及的指令不多,我整理了一下

ldc:將常亮加載到操作數棧
astore_1: 將棧頂元素的值保存到變量1
new: 為要創建的類實例開辟內存空間,并將地址壓入操作數棧
dup: 復制操作數棧頂值,并將其壓入棧頂
invokespecial:調用方法,例子中的方法是類的構造器

現在我們結合指令和操作數棧,來模擬一次計算

Java中"abc"和new String("abc")有哪些區別

回到最開始的問題,a="123"和a=new String("123")的區別,前者指向的是常量池的地址,后者指向的是堆中新開辟的地址。這兩個 == 的結果,自然是不相等的。equals的結果呢?equals是字符逐個比較內容,是相等的。

關于Java中"abc"和new String("abc")有哪些區別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五家渠市| 清新县| 思茅市| 镇平县| 丹棱县| 来安县| 乐昌市| 博湖县| 察哈| 乐山市| 长寿区| 彝良县| 常宁市| 绥中县| 永德县| 宝清县| 鹤山市| 托克逊县| 衡南县| 八宿县| 葵青区| 潜山县| 永川市| 麻江县| 咸阳市| 连江县| 临夏县| 湾仔区| 额敏县| 榕江县| 武平县| 射阳县| 右玉县| 新平| 清新县| 余姚市| 贵南县| 遂平县| 依安县| 泸定县| 绥芬河市|