2010-06-22 6 views
1

Pourquoi String.equls() renvoie true mais Stringbuilder.equals() renvoie false?StringBuffer et String Comparaison

StringBuffer sb1 = new StringBuffer("Amit"); 
    StringBuffer sb2= new StringBuffer("Amit"); 
    String ss1 = "Amit"; 
    String ss2 = "Amit"; 

System.out.println(sb1.equals(sb2)); //returns false 
System.out.println(ss1.equals(ss2)); //returns true 

Thx

Répondre

3

StringBuffer ne remplace pas les égaux de l'objet méthode(), et donc, il retourne vrai que lorsqu'un objet StringBuffer est comparé à lui-même.

public boolean equals(Object obj) { 
    return (this == obj); 
} 

Pour comparer deux StringBuffers en fonction de leur contenu, faire quelque chose comme ceci:

sb1.toString().equals(sb2.toString()); 
+0

Alors comment comparer comme des objets String? – JavaUser

+0

Suivi, pour JavaUser: [documentation StringBuffer] (http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html) - comme vous pouvez voir la méthode 'equals' n'est pas surchargé dans StringBuffer (en bas de la liste des méthodes il y a "Methods inherited from java.lang.Object", qui contient "equals"), donc vous pouvez observer le comportement de StringBuffer # equals est celui de [Object # est égal à ] (http://java.sun.com/javase/6/docs/api/java/lang/Object.html#equals (java.lang.Object)) –

+0

@JavaUser Vous pouvez rechercher la documentation de la chaîne de cette façon ainsi - notez ce que [String # equals] (http://java.sun.com/javase/6/docs/api/java/lang/String.html#equals (java.lang.Object)) dit à propos de lui-même . –

2

StringBuffer ne définit pas égale méthode, Object est égal à la méthode utilisée, qui ne les rendements vrai si c'est le même objet. Vous pouvez faire

sb1.toString().equals(sb2.toString()) 

si vous voulez les comparer en tant que chaînes

0
StringBuffer sb1 = new StringBuffer("Amit"); 
StringBuffer sb2= new StringBuffer("Amit"); 
String ss1 = "Amit"; 
String ss2 = "Amit"; 

System.out.println(sb1.equals(sb2)); //returns false 
System.out.println(ss1.equals(ss2)); //returns true 

Dans les premiers sb1.equals de cas (SB2), SB1 et SB2 auront deux adresses différentes, car il ne remplace pas la égal à() méthode. Si vous voulez vraiment faire une comparaison qui vous renvoie vrai est

sb1.toString().equals(sb2.toString()) 
+0

n'est pas pertinent ici. – unbeli

+0

@unbeli: Cela aurait dû être des adresses. Merci .. a corrigé la réponse – bragboy