华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓課程 | 模擬考場 | 考試論壇  
全國  |             |          |          |          |          |         
  當前位置:計算機等級 > 二級考試 > Java語言程序設計 > 考試輔導 > 文章內(nèi)容
  

全國計算機二級考試Java語言程序設計知識點(5)

中華IT學院   【 】  [ 2016年4月27日 ]

String

  1、初始化:

  一般由String聲明的字符串,長度是不可變的,這也是它與StringBuffer和StringBuilder最直觀的一個區(qū)別。一般初始化方式:String s = "hello world";經(jīng)過這條語句,JVM的棧內(nèi)存中產(chǎn)生一個s變量,堆內(nèi)存中產(chǎn)生hello world字符串對象。s指向了hello world的地址。像上面這種方式產(chǎn)生的字符串屬于直接量字符串對象,JVM在處理這類字符串的時候,會進行緩存,產(chǎn)生時放入字符串池,當程序需要再次使用的時候,無需重新創(chuàng)建一個新的字符串,而是直接指向已存在的字符串。

  2、String s = "123" + "456"內(nèi)存中產(chǎn)生幾個字符串對象?

  這是個比較有爭議的問題,面試的時候,老師還挺喜歡問,論壇上大家說幾個的也有,我給大家分析一下,因為我們前面有提到Java字符串的緩存機制,編譯器在編譯的時候會進行優(yōu)化,所以在編譯的過程中123和456被合成了一個字符串"123456",因此,如果緩存池中目前沒有123456這個對象,那么會產(chǎn)生一個,即""123456",且棧中產(chǎn)生一個引用s指向它,如果緩存池中已經(jīng)存在"123456",那么將產(chǎn)生0個對象,直接用s指向它。

  3、StringBuffer、StringBuilder

  StringBuffer和StringBuilder就是所謂的可變字符串類,共四個構(gòu)造方法:

  StringBuffer()

  public StringBuffer(int paramInt)

  public StringBuffer(String paramString)

  public StringBuffer(CharSequence paramCharSequence)

  觀察其源碼發(fā)現(xiàn),使用StringBuffer()時,默認開辟16個字符的長度的空間,使用public StringBuffer(int paramInt)時開辟指定大小的空間,使用public StringBuffer(String paramString)時,開辟paramString.length+16大小的空間。都是調(diào)用父類的構(gòu)造器super()來開辟內(nèi)存。這方面StringBuffer和StringBuilder都一樣,且都實現(xiàn)AbstractStringBuilder類。

  二者幾乎沒什么區(qū)別,基本都是在調(diào)用父類的各個方法,一個重要的區(qū)別就是StringBuffer是線程安全的,內(nèi)部的大多數(shù)方法前面都有關(guān)鍵字synchronized,這樣就會有一定的性能消耗,StringBuilder是非線程安全的,所以效率要高些。

分享到:
本文糾錯】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務  聯(lián)系方式  站內(nèi)導航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
那坡县| 彰武县| 固安县| 巴青县| 卓资县| 遂昌县| 林口县| 霍州市| 乌兰察布市| 蒙阴县| 临海市| 格尔木市| 富川| 民勤县| 南靖县| 大洼县| 平武县| 承德县| 郸城县| 尚义县| 饶河县| 南部县| 冀州市| 南康市| 苍梧县| 台南县| 祥云县| 南江县| 南和县| 长子县| 达孜县| 贵溪市| 洪洞县| 双流县| 鄂尔多斯市| 天长市| 琼结县| 于都县| 水富县| 唐海县| 嘉兴市|