String

  整理一下才發現關於String 的問題還真不少,出了之前說過的toString()、valueOf()、.equals()之外,還有下面這些。

         1、字符串發轉,我們可以有兩種方法實現字符串的反轉,一種是利用字符串存儲字符數據的原理,取出它的char(st.charAt(i))值,也可以用string.toCharArray方法將字符串轉化成char數組,重新排列並保存。另一種是生成StringBuffer對象,利用StringBuffer的reverse方法。

        這裏又要提到String和StringBuffer的區別。這個不說也罷。不過,還有一種類型是StringBuilder,它與StringBuffer功能相似,只不過,StringBuilder線程是安全的,所以如果拼接字符串可能會涉及到線程安全問題時,應該使用StringBuilder。

         2.,String是按照平臺默認的字符串進行String對象的創建的。如果有特殊字符集設定的需求時,可以用String的帶字符參數構造方法來創建,該方法包含兩個參數,一個時byte數組,一個是字符集編碼的字符串形式。比如:String a =new String("中國","GBK")。

       3、還有一個問題是字符串對象池,前面有談到==和.equals方法的區別。如果我們明白了字符串對象池的概念,那麼之前的問題也就迎刃而解了。

       從java5.0開始,java虛擬機在啓動時會實例化9個對象池,分別用來存儲8中基本類型的包裝類對象和String對象。

        我們先來看一下這個問題:

         String str1="1111";

         String str2=new String("1111");        

        這兩種創建方法的區別就在於前者是在對象池中取對象,後者是直接生成新的對象。當在程序中使用到雙引號引起來一個字符串時,JVM就回到String的對象池中檢查是否有一個值相同的對象。如果有,就取現成的,沒有就在對象池中創建,並返回其應用。

       所以 如果String str3=“1111”,那麼很明顯,str1和str3是同一個對象,它們都是直接從對象池中取得的。其他封裝類的對象池與類似,工作原理是一樣的。

      OK,就先這麼多吧,以後遇到再整理啦~~~~~~
發佈了40 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章