簡體   English   中英

如何比較StringBuffer對象是否相等

[英]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類的Javadoc,它列出的值equals從類java.lang.Object繼承的方法之一。

因此,它不會覆蓋equals方法,這意味着Object類的equals方法用於比較兩個StringBuffer對象。 因為它只是檢查引用(即使用==運算符),所以您對sb2.equals(sb3)了解是false的(它們是兩個不同的Objects )。

這是對象的equals方法的Javadoc,它表示以下內容:

指示其他某個對象是否與此對象“相等”。 equals方法對非null對象引用實現對等關系

StringBuffer不會覆蓋equals() ,因此它繼承了Objectequals()實現,該實現本質上與==相同。 這意味着:

  • 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.javaequals的實現基於==的結果來考慮引用相等,它只是作為return (this == obj); 其中objequals方法的參數( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM