Java中關於String型別的10個問題

strongme發表於2016-08-03

1. 如何比較兩個字串?用“=”還是equals

簡單來說,“==”是用來檢測倆引用是不是指向記憶體中的同一個物件,而equals()方法則檢測的是兩個物件的值是否相等。只要你想檢測倆字串是不是相等的,你就必須得用equals()方法。

如果你知道“字串保留(string intern)”的概念那就更好了。

2. 為什麼安全敏感的字串資訊用char[]會比String物件更好?

String物件是不可變的就意味著直到垃圾回收器過來清掃之前它們都不會發生變化的。用陣列的話,就可以很明確的修改它任何位置的字元元素。這樣的話,如密碼等安全敏感的資訊就不會出現在系統的任何地方。

3. 字串物件能否用在switch表示式中?

從JDK7開始的話,我們就可以在switch條件表示式中使用字串了,也就是說7之前的版本是不可以的。

// java 7 only!
switch (str.toLowerCase()) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}

4. 如何將字串轉換為整型數值?

int n = Integer.parseInt("10");

如此簡單,經常使用有偶爾也會被遺忘。

5. 如何用空格去分隔字串?

我們可以很便捷的使用正規表示式來進行分隔。“\s”就表示空格,還有如””,”\t”,”\r”,”\n”.

String[] strArray = aString.split("\\s+");

6. substring()方法具體是都幹了些啥?

在JDK6中,這個方法只會在標識現有字串的字元陣列上 給一個視窗來表示結果字串,但是不會建立一個新的字串物件。如果需要建立個新字串物件,可以這樣在結果後面+一個空的字串:

str.substring(m, n) + ""

這麼寫的話就會建立一個新的字元陣列來表示結果字串。同時,這麼寫也有一定的機率讓你的程式碼跑的更快,因為垃圾回收器會吧沒有在使用的大字串回收而留下子字串。

Oracle JDK7中的substring()方法會建立一個新的字元陣列,而不用之前存在的。看看這張圖就會明白substring()方法在JDK6和JDK7中的區別。

7. String&StringBuilder&StringBuffer

String vs StringBuilder:StringBuilder是可變的,這就意味你在建立物件之後還可以去修改它的值。StringBuilder vs StringBuffer:StringBuffer是同步的,意味著它是執行緒安全的,但是就會比StringBuilder慢些。

8. 如何快速重複構造一段字串?

在Python程式設計中,只需要用字串去乘以一個數字就可以 搞定了,那在Java程式設計中,我們可以使用來自Apache Commons Lang包中的StringUtils類的repeat()方法。

String str = "abcd";
String repeated = StringUtils.repeat(str,3);
//abcdabcdabcd

9. 如何將時間格式的字串轉換成date物件?

String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
//Tue Sep 17 00:00:00 EDT 2013

10. 如何計數一個字元在某個字串中出現的次數?

使用Apache Commons Lang包中的 StringUtils類就可以完成這個工作。

int n = StringUtils.countMatches("11112222", "1");
System.out.printl```  n(n);

相關文章