易混問題總結---(equals VS ==)

==和equals
“測試物件參考時,唯有當兩個參考指向同一物件時,==運算子的結果才為true,同樣的,
唯有當兩個參考指向不同物件時,!=運算子的結果才為true,這兩個運算子的處理與物件
的內容無關。需要特別注意的是,在String中使用==,因為Java為節省記憶體,會在某一
輪調區中維護唯一的String物件,所以如果在類別裡使用同一字串,Java只會建立一個唯
一的字串而已。”[參考-->(equals和==)]
在Object中equals和==都是默認比較兩個reference是否是指向同一對象的,但是由於
在String中equals被覆寫了,所以equals對於String來講是比較內容的了。但是對於其他
的類的對象的內容的比較該怎麼半呢,那就只要自己覆寫了,舉個例吧:
class BecauseLove
{
  public String str="";
  BecauseLove(String s){
    str=s; 
 }
//+---------override-------------+
 public boolean equals(Object o){
    if(this==o){//先比較是否是指向同一對象
        return true;
    }
    if(o instanceof BecauseLove){//instanceof操作符的作用是判斷一個變量是否是右操作數指出的類的一個對象
        BecauseLove bl=(BecauseLove)o;
        return str.equals(bl.str);
    }
    return false;
 }
//+---------------------------------+
}
class TestBL
{
  BecauseLove BL1 = new BecauseLove("First");
  BecauseLove BL2 = new BecauseLove("First");
  void compare(BecauseLove a ,BecauseLove b){
  if (a.equals(b))
  {
   System.out.println("Yes");
  }
 }
  void test(){
    compare(BL1,BL2);
  }
 public static void main(String args[]){
  TestBL t = new TestBL();
  t.test();
}
 }
+——--------------------------------------+
這樣就可以比較對象的內容了。當然在覆寫過程中會要注意一些問題的,具體是什麼問題還在學習中……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章