【Java難點】 String類與Stri…

1、String的字串長度是不會改變的,如:String str1="從來富貴不是夢";
   產生的字串常量在內存數據段的常量池中。這個字串所佔的內存空間是固定
  不變的,所以當然不能向這段空間中追加更多的字串。而str1=str1+"未有聖
  賢不讀書";不是在原有空間中追加字串,而是將原來str1所指向的空間中的字
  串取出來追加一個字串然後放到另外一個空間中,這個新的空間顯然和原來的
  str1所指向的空間地址是不一樣的。
2、回到你的問題:StringBuffer和String剛好不同在內存的空間分配上,
StringBuffer所創建的空間在盛裝字串時分配的空間並不是像String那樣剛
   好與字串所佔大小相同,而是在盛裝字串大小的基礎上還要追加16位的空間
   這就意味着StringBuffer所創建的空間可以向其中再次追加字串,那是不是
   只能追加剩下的16位大小的字串呢?答案否定,當你在向StringBuffer中追
   加字串時會觸發StringBuffer的reSize()方法,這個方法就會在你追加字串
   時動態擴展內存空間以保持該空間始終有16位的剩餘大小,那StringBuffer
   是不是可以無限追加字串呢?答案是肯定的,條件是受到你PC機內存的限制
3、因爲對StringBuffer來講追加字串是在原有的空間中進行,並沒有像String
   那樣產生新的空間,所以返回的內存地址顯然是相同的,既然返回的是同一
   段內存空間地址,那理所當然空間中的就是同一個字符串,現在你明白了
   嗎?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章