Java基礎:字串

來源:互聯網
上載者:User

標籤:

 轉載請註明出處:jiq?欽‘s technical Blog 

(1)String本質:

String對象是不可改變的,任何看起來會修改String對象的操作實際上都是建立了一個全新的Sting對象,然後再該全新對象上修改。而效率更高的StringBuilder正好不同。


(2)String和StringBuffer的區別:

String 類型和 StringBuffer 類型的主要效能區別其實在於String 是不可變的對象,因此在每次對 String 類型進行改變的時候其實都等同於產生了一個新的String對象,然後將指標指向新的String對象。

而如果是使用StringBuffer類則結果就不一樣了,每次結果都會對 StringBuffer 對象本身進行操作,而不是產生新的對象,再改變對象引用。


(3)StringBuffer和StringBuilder的區別:

StringBuffer是StringBuilder的安全執行緒的版本。從 JDK 5.0 開始,為該類增添了一個單個線程使用的等價類別,即 StringBuilder 。與該類相比,通常應該優先使用 StringBuilder 類,因為它支援所有相同的操作,但由於它不執行同步,所以速度更快。 

但是如果將 StringBuilder 的執行個體用於多個線程是不安全的。需要這樣的同步,則建議使用 StringBuffer 。


(4)相關類:

String,StringBuilder,Pattern + Matcher,Scanner。


(5)編碼:

 ASCII編碼(IOS-8895-1), ASICII編碼本地化(GB2312,BIG5等),UniCode國際化編碼(UTF-8, UTF-16等)。


(6)兩個位元組:

 注意java中的Char,不管是不是漢字,都是兩個位元組。


(7)漢字識別:

/** * java通過判斷當前字元的UniCode碼範圍來判斷當前字元(兩個位元組)是不是漢字 * */staticvoid findChinese(String str){String newStr = "";for(int j=0;j<str.length();j++){newStr = str.substring(j,j+1); //"\\u"是標識UniCode碼用的,代表其後的四位16進位數是對應的UniCode編碼if(Pattern.matches("[\u4E00-\u9FA5]",newStr)){System.out.print(newStr);}}System.out.print("\n");}

(8)編譯時間修改和運行時修改:

關於編譯時間和運行時修改字串(確定字串內容的區別):任何運行時修改字串的動作都會建立新的String對象,但是編譯時間卻不是。


可以從上面代碼看出,b1和b3都是在編譯時間修改好的,而b2是在運行時進行修改的,所以會重新建立一個string對象,而不會指向原有的“123”


編譯時間和運行時還有效率的區別:

String S1 = “This isonly a” + “ simple” + “ test”;

StringBuffer Sb = newStringBuilder(“This is only a”).append(“ simple”).append(“ test”);

你會很驚訝的發現,產生 String S1對象的速度簡直太快了,而這個時候 StringBuffer 居然速度上根本一點都不佔優勢。

其實這是 JVM 的一個把戲,在 JVM 眼裡,這個 String S1 = “This is only a” + “ simple”+ “test”; 其實就是: String S1 = “This is only a simple test”; 編譯時間就已經修改好了字串S1,所以當然不需要太多的時間了。

 

但大家這裡要注意的是,如果你的字串是來自另外的String 對象的話,速度就沒那麼快了,譬如:

String S2 = “This isonly a”;

String S3 = “simple”;

String S4 = “ test”;

String S1 = S2 +S3 +S4;

這是在運行時才修改S1的內容,這時會老老實實重新建立一個對象,將S1指向它。

Java基礎:字串

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.