「=」と「equals」の方法にはどんな違いがありますか?

1602 ワード

参照
申明:本編は転載、原文の住所に属します.http://rodney.cnblogs.com/archive/2005/08/18/217471.html
原文の作者が私たちのために素晴らしい文章を提供してくれてありがとうございます.転載する友達がいます.上記の原文の住所を明記してください.ありがとうございます.
==演算子は、変数の値が等しいかどうかを専門に比較します.分かりやすいのは、
  

  int a=10;
  int b=10;
  // a==b  true。
  //         :
  String a=new String("foo");
  String b=new String("foo");
  // a==b   false。
前のスレッドによると、オブジェクト変数は参照であり、それらの値は対象のメモリアドレスを指し、対象自体ではない.aとbは共にnewオペレータを使用しており、メモリ内に「foo」という二つの内容の文字列を生成することを意味しており、「二つ」である以上、自然に異なるメモリアドレスに位置している.aとbの値は実は二つの異なるメモリアドレスの値なので、「=」のオペレータを使って、結局falseになります.確かに、aとbというオブジェクトの内容は全部「foo」であり、「等しい」はずですが、==操作子は対象の内容の比較には関係しません.
対象内容の比較は、まさにequalsメソッドがすることです.
Object対象のequals方法はどのように実現されているかを見てください.
  
boolean equals(Object o){

  return this==o;

  }
Objectオブジェクトはデフォルトで==操作子を使用します.したがって、もしあなたが作ったクラスがequalsメソッドをカバーしていないなら、あなたのクラスはequalsと使用=を使って同じ結果を得ることができます.同様に、Objectのequals法はequals法の達成すべき目標に達していないことが分かる.2つのオブジェクトの内容が等しいかどうかを比較する.答えはクラスの作成者が決めるべきだから、Objectはこの任務をクラスの創設者に残しました.
極端な種類を見てください.
  
Class Monster{
  private String content;
  ...
  boolean equals(Object another){ return true;}

  }
equals法をカバーしました.この実装により、Monsterのインスタンスの内容にかかわらず、それらの比較は常にtrueに戻ります.
ですから、equalsで対象の内容が同じかどうかを判断します.もちろん考えないでください.同じと思われるかもしれませんが、このタイプの著者はそうは思いません.種類のequals方法の実現は彼が掌握しています.equals方法を使用する場合、またはハッシュコードに基づくセット(hashSet,hashMap,hashTable)を使用する場合は、java docを見て、このクラスのequals論理がどのように実現されるかを確認してください.