比較StringBuffer字符串內容是否相等?

爲何會有這個問題呢?首先得看看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 }
相關文章
相關標籤/搜索