![](/img/trans.png)
[英]Can OpenMath-Objects be compared to another in terms of equality?
[英]How StringBuffer Objects are Compared for equality
String s="";
StringBuffer sb2=new StringBuffer("hi");
StringBuffer sb3=new StringBuffer(sb2);
StringBuffer sb4=sb3;
if(sb2.equals(sb3))
{
System.out.println("sb2.equals(sb3):"+sb2.equals(sb3));
s+="2 ";
}
if(sb3.equals(sb4))
{
System.out.println("sb3.equals(sb4):"+sb3.equals(sb4));
s+="3 ";
}
考慮到s2,s3,s4都是StringBuffer對象,而String Buffer沒有equal()方法,為什么首先給出false,然后給出true呢?
StringBuffer
不會覆蓋equals()
,因此它繼承了Object
的equals()
實現,該實現本質上與==
相同。 這意味着:
sb2.equals(sb3)
為false,因為sb2和sb3引用了不同的對象。 sb3.equals(sb4)
為true,因為兩者都引用相同的對象。 所有其他類實際上是Object
類的子類,因此StringBuffer
是聲明中Object
的子類
如果查看Object
類文檔,則其中包含.equals()
方法,如果兩個對象具有相同的哈希碼,則此方法返回true
如果您查看StringBuffer
類文檔,則它沒有.equals()
方法,因為它實際上繼承了超類Object
的.equals()
方法。
StringBuffer
不會覆蓋equals
方法。 所有類都是Object.java
子類,因此StringBuffer
對象繼承了equals
方法。 Object.java
中equals
的實現基於==
的結果來考慮引用相等,它只是作為return (this == obj);
其中obj
是equals
方法的參數( public boolean equals(Object obj)
)
String.java
會覆蓋equals
方法。 您應該通過從StringBuffer
獲得String
對象來使用它
為了平等,您可以使用以下方法。
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
if( (sb1.toString()).equals(sb2.toString())){
System.out.println(" true ");
}else {
System.out.println(" false ");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.