国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?

這篇具有很好參考價值的文章主要介紹了面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

這個問題相信每個學(xué)習(xí) java 的同學(xué)都不陌生,作為一個經(jīng)典的面試題,到現(xiàn)在工作這么多年了我真是認為挺操蛋的一個問題,在網(wǎng)上到現(xiàn)在你仍然可以看見很多討論這個問題的人,其中不乏工作很多年的人都有爭論,我認為還是有必要來說一說這個問題的。


從方法區(qū)說起

常量池存在于方法區(qū),而方法區(qū)在jdk1.7版本前后改變比較大,所以還是先來說說方法區(qū)的演變。

在jdk1.7版本之前,常量池存在于方法區(qū),方法區(qū)是堆的一個邏輯部分,他有一個名字叫做非堆。

面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?,面試題,java,面試題

1.7版本把字符串常量池放到了堆中。

面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?,面試題,java,面試題

而在1.8以后,則是移除了永久代,方法區(qū)概念保留,方法區(qū)的實現(xiàn)改為了元空間,常量池還是在堆中。

面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?,面試題,java,面試題

為什么要說方法區(qū)的改變,只是為了文章接下來的內(nèi)容不會由于JDK的版本而產(chǎn)生分歧,接下來內(nèi)容都會以jdk1.8版本作為基礎(chǔ)來討論。

String s = new String(“xyz”);

先來一段代碼:

public class Test {
    public static void main(String[] args) {
        String s = "xyz";
    }
}

接著我們javac編譯代碼,然后用javap來反編譯,執(zhí)行javap -c Test

面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?,面試題,java,面試題

從結(jié)果來看,ldc命令在常量池中創(chuàng)建了一個"xyz"的對象,然后把他推至操作數(shù)棧頂,然后astore保存到局部變量,return返回。

接著看第二段面試題中的代碼

public class Test {
    public static void main(String[] args) {
        String s = new String("xyz");
    }
}

同樣反編譯分析

面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?,面試題,java,面試題

很明顯,我們看到new 創(chuàng)建了一個String對象,同時ldc在常量池中創(chuàng)建了"xyz"字符串對象,之后invokespecial執(zhí)行構(gòu)造函數(shù),astore_1賦值,return返回。

通過以上兩個例子,可以知道String s = new String(“xyz”); 創(chuàng)建了2個對象,而有些答案說的3個對象,則是把引用s也算作一個對象。

還有答案說xyz存在就創(chuàng)建了2個,不存在就創(chuàng)建了3個(包含引用s),再來測試一下。

public class Test {
    public static void main(String[] args) {
        String s = "xyz";
        String s2 = new String("xyz");
    }
}

面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?,面試題,java,面試題

從這里,很明顯的發(fā)現(xiàn)這就是我們例子1和2的一個結(jié)合,但是注意兩次ldc后面的#2,#號代表著索引,說明第二次new String(“xyz”)的時候并沒有重新創(chuàng)建xyz對象。

一些常見的指令助記符含義:

  1. nop, 什么都不做。
  2. aconst_null,將 null 推送至棧頂。
  3. iconst_i(變量數(shù)字),將 int 型 i 推送至棧頂。同理有l(wèi)const_0,fconst_0這種你應(yīng)該知道什么意思了
  4. ldc,將 int,float 或 String 型常量值從常量池中推送至棧頂。
  5. iload,將指定的 int 型局部變量推送至棧頂。
  6. istore,將棧頂 int 型數(shù)值存入指定局部變量。同理astore_i代表將棧頂引用型數(shù)值存入第i個局部變量。
  7. dup,復(fù)制棧頂數(shù)值并將復(fù)制值壓入棧頂。
  8. invokevirtual,調(diào)用實例方法。
  9. invokespecial,調(diào)用超類構(gòu)造方法,實例初始化方法,私有方法。
  10. invokestatic,調(diào)用靜態(tài)方法。
  11. invokeinterface,調(diào)用接口方法。
  12. invokedynamic,調(diào)用動態(tài)鏈接方法。
  13. new,創(chuàng)建一個對象,并將其引用值壓入棧頂。

總結(jié)

到底創(chuàng)建了幾個對象呢?

  1. 如果xyz不存在,引用算對象的話,那就是3個
  2. 如果xyz不存在,引用不算對象的話,那就是2個
  3. 如果xyz存在,引用算對象的話,那就是2個
  4. 如果xyz存在,引用不算對象的話,那就是1個

當(dāng)然,我認為引用肯定是不算對象的,最終答案應(yīng)該是1或者2個,這個面試題說實話不應(yīng)該出現(xiàn)在初級面試題里。文章來源地址http://www.zghlxwxcb.cn/news/detail-795075.html

到了這里,關(guān)于面試題:String s = new String(“xyz“) 創(chuàng)建了幾個對象?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java進階(4)——結(jié)合類加載JVM的過程理解創(chuàng)建對象的幾種方式:new,反射Class,克隆clone(拷貝),序列化反序列化

    Java進階(4)——結(jié)合類加載JVM的過程理解創(chuàng)建對象的幾種方式:new,反射Class,克隆clone(拷貝),序列化反序列化

    1.類什么時候被加載到JVM中,new,Class.forName: Class.forName(“包名.類名”); 2.創(chuàng)建對象的方式,反射,本質(zhì)是獲得類的類對象Class; 3.克隆clone,深拷貝,淺拷貝的對比; 4.序列化和反序列化的方式; Hello h; // 此時沒有用Hello,jvm并沒有進行類加載 看到new : new Book() Class.forName:

    2024年02月12日
    瀏覽(30)
  • Java面試題Class類的理解?創(chuàng)建類的對象的方式?

    Java面試題Class類的理解?創(chuàng)建類的對象的方式?

    1.類的加載過程: 程序經(jīng)過 javac.exe 命令以后,會生成一個或多個字節(jié)碼文件(.class結(jié)尾)。 接著我們使用 java.exe 命令對某個字節(jié)碼文件進行解釋運行。相當(dāng)于將某個字節(jié)碼文件 加載到內(nèi)存中。此過程就稱為類的加載 。加載到內(nèi)存中的類,我們就稱為運行時類,此運行時類,

    2024年02月10日
    瀏覽(19)
  • 【面試題】new 一個對象時,js 做了什么?

    前后端面試題庫 (面試必備) 推薦:★★★★★ 地址:前端面試題庫??web前端面試題庫 VS java后端面試題庫大全 在 JavaScript 中, 通過 new 操作符可以創(chuàng)建一個實例對象,而這個實例對象繼承了原對象的屬性和方法。因此,new 存在的意義在于它實現(xiàn)了 JavaScript 中的繼承,而不

    2024年02月03日
    瀏覽(16)
  • Java中==和equals的區(qū)別,包裝類對比、String和new String

    Java中==和equals的區(qū)別,包裝類對比、String和new String

    ? ? ? ? 對于這個問題,我們得了解基本類型和引用類型在內(nèi)存中的結(jié)構(gòu),具體如下: 引用對象句柄訪問: 引用對象直接指針訪問: ? ????????可以看出,無論哪種方式訪問基本類型和引用類型的實例數(shù)據(jù),基本類型的內(nèi)存上是保存值,而引用類型的內(nèi)存上是保存指針

    2024年02月11日
    瀏覽(16)
  • DAO概念板塊代幣大盤點,你又把握了幾個?

    DAO概念板塊代幣大盤點,你又把握了幾個?

    你的認知決定你能夠走多遠! ??? ? ? 大家好我是小哲,你的認知決定你能夠走多遠,元宇宙的火爆已成定局,下面就來聊聊DAO模塊。你又認識多少呢? ? ? ? ? ? 火爆的dao大家應(yīng)該都有聽到過DAO這個概念,但是可能對于DAO具體是什么還不太了解。說白了,其實DAO很好理

    2023年04月26日
    瀏覽(16)
  • 單線程、同步、異步、預(yù)解析、作用域、隱式全局變量、對象創(chuàng)建、new

    單線程、同步、異步、預(yù)解析、作用域、隱式全局變量、對象創(chuàng)建、new

    cpu 資源分配的最小單位 一個進程可以有多個線程 cpu 調(diào)度的最小單位 線程建立在進程的建立基礎(chǔ)上的一次程序的運行單位 線程分為:單線程 多線程 單線程:js是單線程 (同一個時間只能完成一個任務(wù)) 多線程:百度是多線程 同步任務(wù)是指在主線程上排隊的任務(wù),只有當(dāng)前

    2024年01月22日
    瀏覽(55)
  • 企業(yè)實施主數(shù)據(jù)管理項目的五大誤區(qū),你中了幾個

    在當(dāng)今高度信息化的商業(yè)環(huán)境中,主數(shù)據(jù)管理(MDM)項目的實施已成為企業(yè)提升運營效率和數(shù)據(jù)質(zhì)量的關(guān)鍵手段。然而,許多企業(yè)在實施主數(shù)據(jù)管理項目時常常陷入一些常見的誤區(qū),導(dǎo)致項目效果不佳甚至失敗。本文將探討主數(shù)據(jù)管理項目實施過程中的五大誤區(qū),并提供相應(yīng)

    2024年01月25日
    瀏覽(26)
  • 前端開發(fā)中常見的20個數(shù)組方法,你掌握了幾個?

    前端開發(fā)中常見的20個數(shù)組方法,你掌握了幾個?

    數(shù)組是每種語言都必須打交道的,重要程度不言而喻! 數(shù)組在前端開發(fā)中的主要使用場景有: 存儲和處理數(shù)據(jù) :數(shù)組是一種有序的數(shù)據(jù)結(jié)構(gòu),可以用來存儲和處理多個相關(guān)的數(shù)據(jù)。在前端開發(fā)中,我們經(jīng)常使用數(shù)組來存儲和處理列表、表格、選項等數(shù)據(jù)。 循環(huán)和遍歷 :數(shù)

    2024年02月15日
    瀏覽(24)
  • 麓言信息學(xué)UI設(shè)計4大雷區(qū),你踩了幾個?

    ??2013年至2015年間,由于智能手機的發(fā)展,移動互聯(lián)的異軍突起,催生了大量的UI設(shè)計崗位,于是乎各種培訓(xùn)班如雨后春筍般冒了出來,成千上萬的從事平面設(shè)計、室內(nèi)設(shè)計、淘寶美工、前端開發(fā)等在職群體看到身邊的人接二連三轉(zhuǎn)型成UI設(shè)計了,且薪資非常可觀,像發(fā)現(xiàn)了

    2024年02月07日
    瀏覽(24)
  • 這些阻礙程序員升職加薪的行為,你中招了幾個?

    這些阻礙程序員升職加薪的行為,你中招了幾個?

    每個程序員在職場奮斗時,總是會生出一些壞習(xí)慣,看似不起眼、無關(guān)緊要,實際上在這些壞習(xí)慣的日積月累的影響下, 不僅會影響工作效率,甚至不利于個人成長,成為阻礙程序員們升職加薪的絆腳石。 今天就為大家總結(jié)了程序員在職場中的 5個壞習(xí)慣 ,看看你有沒有中

    2023年04月27日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包