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

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

Java中"abc"和newString("abc")有哪些區(qū)別

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

成都創(chuàng)新互聯(lián)主營(yíng)海林網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開(kāi)發(fā),海林h5微信小程序開(kāi)發(fā)搭建,海林網(wǎng)站營(yíng)銷推廣歡迎海林等地區(qū)企業(yè)咨詢

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

正文

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

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

現(xiàn)在有一個(gè)類,定義入下

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

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

Compiled from "A01.java"
public class javap.A01 {
  public javap.A01();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()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."":(Ljava/lang/String;)V
      12: astore_2
      13: return
}

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

ldc:將常亮加載到操作數(shù)棧
astore_1: 將棧頂元素的值保存到變量1
new: 為要?jiǎng)?chuàng)建的類實(shí)例開(kāi)辟內(nèi)存空間,并將地址壓入操作數(shù)棧
dup: 復(fù)制操作數(shù)棧頂值,并將其壓入棧頂
invokespecial:調(diào)用方法,例子中的方法是類的構(gòu)造器

現(xiàn)在我們結(jié)合指令和操作數(shù)棧,來(lái)模擬一次計(jì)算

Java中

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

關(guān)于Java中"abc"和new String("abc")有哪些區(qū)別就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


文章題目:Java中"abc"和newString("abc")有哪些區(qū)別
本文路徑:http://weahome.cn/article/ihidod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部