Java中的字符串用法小結。本站提示廣大學習愛好者:(Java中的字符串用法小結)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中的字符串用法小結正文
本文實例總結了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.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法式設計有所贊助。