Java函數字符串參數傳遞的傳址模式實現

前陣子,在寫一個SWT控件的時候,發現JAVA由於沒有指針,不能象C語言那樣通過指針傳遞參數地址來取函數的參數值。

於是在網上尋覓,發現StringBuffer可以有效解決這個問題,只要把入參由String改成StringBuffer就可以實現獲取函數中操作過的字符串了。StingBuffer.append(Str);

找到的信息如下:

 

StringBuffer爲了彌補String的不足而產生的。

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
   那樣產生新的空間,所以返回的內存地址顯然是相同的,既然返回的是同一
   段內存空間地址,那理所當然空間中的就是同一個字符串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章