String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); // trueJava對字符串常量提供了緩衝區,緩衝區內的字符串是能夠被共享的。
String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1 == s2); // false
使用構造器建立的字符串都是在緩衝區外面建一個新的。 java
String s1 = "abc"; String s2 = "a"; String s3 = "bc"; String s4 = s2 + s3; System.out.println(s1 == s4); // false
Java中字符串的相加其內部是使用StringBuilder類的append()方法和toString()方法來實現的. 而StringBuilder類toString()方法返回的字符串是經過構造函數建立的. 正則表達式
String s1 = "abc"; String s2 = "a" + "bc"; System.out.println(s1 == s2); // true其實這裏的s2並無進行字符串相加, 兩個雙引號形式的字符串常量相加, 在編譯的時候直接會被轉爲一個字符串"abc".
String str = "abc"; str.substring(3); str.concat("123"); System.out.println(str == "abc"); // true
因爲字符串是常量(內存中建立對象後不能修改), 該類中全部方法都不會改變字符串的值. 若是但願使用一個可變的字符串, 可使用StringBuilder或StringBuffer類. apache
(2) Java判斷字符串是否爲空有三種方法:
a. 使用的人最多,直觀方便,可是效率低。 數組
if (str == null || str.equals(""))
b. 比較字符串的長度,效率高
安全
if (str == null || str.length() == 0)c. Java SE 6.0纔開始使用,效率和b才很少
if (str == null || str.isEmpty())
String是不可改變的。這意味着一旦String對象被建立,那個地址上的值將保持不變,直到垃圾收集器有空來作自動清理。而使用char[ ]能夠(在用完後)明確地修改它的元素。這種一來,私密信息(例如密碼)就不會在系統的任何地方出現。
3. 咱們能夠在switch語句中用String做分支條件嗎?
從JDK 7開始是能夠的。咱們可使用String符串做爲Switch條件。第JDK 6以前,咱們不能使用String做爲Switch條件。
4. 如何轉換String爲int? app
int n = Integer.parseInt("10");
能夠簡單地使用正則表達式作分割。「\s"表明全部空格符,如""、 " \ "、 " \ r"、" \ n "。 函數
String[] strArray = aString.split("\\s+");
在JDK 6中,substring() 提供了一個顯示已有字符串char[]的接口,但不建立新字符串。若是須要建立一個新的char[]表示的字符串,能夠像下面同樣與一個空字符串相加: ui
str.substring(m, n) + "";
這樣會建立一個新的字符數組,表示新的字符串。示例方法有時可使代碼運行更快,由於垃圾收集器能夠收集未使用的大字符串只保留子串。
在Oracle JDK 7中 ,substring()會建立一個新的字符數組而不是使用現有的。
7. String vs StringBuilder vs StringBuffer spa
String 與StringBuilder的區別:StringBuilder的是可變的,這意味着能夠在建立之後再做修改。
StringBuilder與StringBuffer的區別: StringBuffer的是同步的,這意味着它是線程安全的,但速度比StringBuilder慢。
8. 如何重複一個字符串?
在Java中,咱們可使用Apache公共語言包(Apache Commons Lang package)中的repeat()。 線程
String str ="abcd"; String repeated = StringUtils.repeat(str,3); //abcdabcdabcd
String str ="Sep 17, 2013"; Date date = null; try { date =new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str); } catch (ParseException e) { e.printStackTrace(); } System.out.println(date); // Tue Sep 17 00:00:00 CST 2013
int n = StringUtils.countMatches("11112222","1"); System.out.println(n);