爲何會有這個問題呢?首先得看看String和StringBuffer的比較區別:app
==只能比較兩個字符串的內存地址是否同樣,不能比較字符串內容;性能
String的equals方法由於重寫了Object的equals方法,因此能夠比較字符串的內容,而StringBuffer由於沒重寫equals方法,直接繼承了Object的equals方法,因此不行。spa
順便提一句:String由於是final類型的,是不可變類,因此對於append等操做,是要從新new String的,而StringBuffer是可變類,不須要從新new StringBuffer,因此在字符串操做上性能很是好,並且好的不是一點點。可試試:code
1 public static void main(String[] args) { 2 StringBuffer s1 = new StringBuffer(); 3 String s2 = new String(); 4 5 Date d = new Date(); 6 long a = d.getTime(); 7 for (int i = 0; i < 100000; i++) { 8 s1.append(i); 9 } 10 Date d2 = new Date(); 11 long b = d2.getTime(); 12 System.out.println(b-a); 13 14 Date d3 = new Date(); 15 a = d3.getTime(); 16 for (int i = 0; i < 100000; i++) { 17 s2 = s2 + i; 18 } 19 Date d4 = new Date(); 20 b = d4.getTime(); 21 System.out.println(b-a); 22 }
那麼如何比較StringBuffer字符串內容是否相等呢?對象
能夠使用toString() 方法將StringBuffer的內容轉換爲String 字符串,再使用equals()方法比較。blog
1 public class Main { 2 public static void main(String[] args) { 3 StringBuffer strb1 = new StringBuffer("Java");// 建立StringBuffer對象str1 4 StringBuffer strb2 = new StringBuffer("Java");// 建立StringBuffer對象str2 5 System.out.println("****不使用toString()方法****"); 6 if (strb1.equals(strb2)) { 7 System.out.println("相等"); 8 } else { 9 System.out.println("不相等"); 10 } 11 System.out.println("****使用toString()方法****"); 12 if (strb1.toString().equals(strb2.toString())) { 13 System.out.println("相等"); 14 } else { 15 System.out.println("不相等"); 16 } 17 } 18 }