成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

工作10年后,再看String s = new String("xyz") 創(chuàng)建了幾個(gè)對(duì)象?

開(kāi)發(fā) 后端
作為一個(gè)經(jīng)典的面試題,到現(xiàn)在工作這么多年了我真是認(rèn)為挺操蛋的一個(gè)問(wèn)題,在網(wǎng)上到現(xiàn)在你仍然可以看見(jiàn)很多討論這個(gè)問(wèn)題的人,其中不乏工作很多年的人都有爭(zhēng)論,我認(rèn)為還是有必要來(lái)說(shuō)一說(shuō)這個(gè)問(wèn)題的。

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

從方法區(qū)說(shuō)起

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

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

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

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

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

String s = new String("xyz");

先來(lái)一段代碼 

  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         String s = "xyz" 
  4.     }  

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

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

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

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

同樣反編譯分析

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

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

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

  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         String s = "xyz" 
  4.         String s2 = new String("xyz");  
  5.     }  

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

一些常見(jiàn)的指令助記符含義:

  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個(gè)局部變量。
  7.  dup,復(fù)制棧頂數(shù)值并將復(fù)制值壓入棧頂。
  8.  invokevirtual,調(diào)用實(shí)例方法。
  9.  invokespecial,調(diào)用超類構(gòu)造方法,實(shí)例初始化方法,私有方法。
  10.  invokestatic,調(diào)用靜態(tài)方法。
  11.  invokeinterface,調(diào)用接口方法。
  12.  invokedynamic,調(diào)用動(dòng)態(tài)鏈接方法。
  13.  new,創(chuàng)建一個(gè)對(duì)象,并將其引用值壓入棧頂。

總結(jié)

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

  1.  如果xyz不存在,引用算對(duì)象的話,那就是3個(gè)
  2.  如果xyz不存在,引用不算對(duì)象的話,那就是2個(gè)
  3.  如果xyz存在,引用算對(duì)象的話,那就是2個(gè)
  4.  如果xyz存在,引用不算對(duì)象的話,那就是1個(gè)

當(dāng)然,我認(rèn)為引用肯定是不算對(duì)象的,最終答案應(yīng)該是1或者2個(gè),這個(gè)面試題說(shuō)實(shí)話不應(yīng)該出現(xiàn)在初級(jí)面試題里。 

 

責(zé)任編輯:龐桂玉 來(lái)源: Python中文社區(qū)
相關(guān)推薦

2021-08-16 08:01:09

String Java面試題

2019-01-22 08:27:50

比爾蓋茨微軟鮑爾默

2024-07-02 12:25:01

2018-04-26 18:25:11

華為

2019-03-25 08:30:20

騰訊互聯(lián)網(wǎng)

2009-03-04 09:59:04

職場(chǎng)心情痛苦

2016-04-13 10:52:12

2019-08-21 09:00:00

2019-07-12 15:21:21

加密貨幣銀行貨幣

2024-06-07 11:14:24

2009-09-22 09:25:45

Chrome谷歌

2023-12-26 14:18:08

2009-07-30 09:07:22

云計(jì)算淘汰的工作云計(jì)算

2009-08-12 11:24:25

C# String對(duì)象

2020-08-31 11:10:57

編程語(yǔ)言PythonJava

2015-08-18 15:14:47

2018-12-05 12:59:28

比特幣區(qū)塊鏈BTC

2017-04-10 13:25:30

2017-10-11 17:04:08

2011-03-10 10:36:59

寬帶光纖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产在线精品一区二区三区 | 久久这里有精品 | 精品国产一区二区三区久久影院 | 亚洲第一天堂 | 亚洲成人精品在线 | 国产美女精品视频免费观看 | 天天躁日日躁狠狠躁白人 | 9久9久9久女女女九九九一九 | 成人二区三区 | 国产在视频一区二区三区吞精 | 国产免费一区二区 | 久久伊人精品一区二区三区 | 亚洲国产网站 | 久久久精品一区二区三区 | 国产色99| 99精品一区二区三区 | 欧美一级在线 | 亚洲一区二区三区在线播放 | 在线播放亚洲 | 精品国产伦一区二区三区观看体验 | 日韩在线高清 | 色婷婷亚洲一区二区三区 | 午夜小视频在线观看 | 日韩av福利在线观看 | 亚洲一区二区久久 | 日日夜夜操天天干 | 日韩一区二区三区精品 | 欧美日韩精品一区 | 国产精品亚洲一区二区三区在线观看 | 国产色婷婷精品综合在线手机播放 | 久草网址| av先锋资源| 精品三级在线观看 | 亚洲一区自拍 | 色视频在线免费观看 | 天天干天天色 | 国产亚洲久| 91成人精品| 五月花丁香婷婷 | av日日操 | 一级做a爰片久久毛片 |