本文實例總結了Java中的字串用法。分享給大家供大家參考。具體分析如下:
字串的本質是char類型的數組,但在java中,所有用雙引號""宣告的字串都是一個String類別的物件。這也正體現了Java完全物件導向的語言特質。
String 類別
1、String類別物件表示的是一個常數字串。它是不可變長度的。也就是說,一旦建立了一個String類別的實例,那麼這個實例所表示的字串是不可改變的。類似
str = str + "Hello";
這樣的操作,實質上是將str 和"Hello" 這兩個String物件合起來創建了一個新的String對象,然後將新String物件的引用賦給了str。大量使用這種操作,就會造成效能上的缺陷。如果需要經常改變字串的內容,則應該使用StringBuffer類別或StringBuilder類別。我們可以用一段小程式來看看String 和StringBuffer類別的效能差異到底有多大。
class StringTest { public static void main(String[] args) { /** * 分別用String 物件和StringBuffer 物件執行10,000次追加操作* 測試執行時間* 2013.3.18 */ String constStr = ""; long lTime = System System System System System System .currentTimeMillis(); for(int i = 0 ; i < 10000 ; ++i) constStr += i; System.out.println("Const String:"+(System.currentTimeMillis()-lTime)); StringBuilder strBuf = new StringBuilder(""); lTime = System.currentTimeMillis(); for(int i = 0 ; i < 10000 ; ++i) strBuf.append(String.valueOf(i)); System.out.println("Buffered String:"+(System.currentTimeMillis()-lTime)); } }執行結果:
可以看到,StringBuilder秒過,而String類別卻要用300ms的時間,可見效能差異之巨大。
StringBuilder 和StringBuffered都表示一個可變長度(mutable)的字串對象,它們之間的區別在於,StringBuffered類別會在線程同步方面做一些安全性處理,而StringBuilder則反之。所以如果只是在單線程式設計的話,StringBuilder要比StringBuffered效率稍高一些(其實差別也不大)
2、"Hello World" 是一個String物件我們可以直接把"Hello World"當作一個物件來使用,如:
if("Hello".equals("Hello")) System.out.println("Yes");輸出結果為Yes.
3.字串物件比較要用equals()方法,而不能單純地使用== 來判斷。因為== 比較的是兩個引用名稱所引用的實例是否相同,equals()方法則比較的是兩個物件中的字串是否相等。
一個常見的問題是,下面的程式碼片段一共產生了幾個String物件?
String str1 = new String("Hello");String str2 = new String("Hello");可能多數人會回答,2個。但事實上這裡總共產生了3個String物件。除了str1 和str2,別忘了"Hello"也是一個String物件哦。
4、String池(Pool)
Java執行時會維護一個String池。當出現一個由雙引號聲明的字串時,JVM會先核查在記憶體中是否存在相同的String物件(字元相同),如果存在,則傳回記憶體中已經存在的物件的引用,如果不存在才會創建一個新的String物件。這樣可以節約記憶體。如下面一段程式碼,str1和str2其實是指向的同一個String物件.
String str1 = "Hello";String str2 = "Hello";
5.接收命令列參數
我們在宣告main方法時,會宣告一個String[] 類型的形參。這個String物件的陣列就保存了使用者在執行這個程式的時候所傳遞進來的命令列參數。請注意,與C語言不同的是,Java裡的命令列參數是從程式名稱後第一個變數開始的。也就是說,String[]資料並不包含應用程式名稱。例如:
class strCmd { public static void main(String[] args) { if(args.length > 0) { for(String str : args) System.out.println(str); } } }執行java strCmd Hello World!時的輸出結果為:
6、字串的分離
類似於C語言中的strtok,String類別也有一個split的方法可以以指定的格式分離一個字串。 split方法傳回一個String物件的數組,表示分離出的每一段字串。如:
class strSplit { public static void main(String[] args) { String str = "Hello/tWorld/tI/tLove/tYou!"; System.out.println("Original String : " + str); String[] strArr = str.split("/t"); for(String s : strArr) System.out.println(s); } }其中,split()方法的參數可以是正規表示式。可以使用java.util套件中的Matcher類別的靜態方法matches()來判斷一個字串是否符合正規表示式
String類別還有更多其它強大的功能,我們應該學會閱讀API文件。在這裡就體現了英語的重要性了、、
希望本文所述對大家的java程式設計有幫助。