java==演算子とequals()方法の違いを詳しく説明します。


Java言語プログラムでは、2つの変数が等しいかどうかを判断するには、2つの方法があります。
1.==演算子
==演算子にとって、2つの変数が基本型であり、数値タイプであれば、それらの値が等しい限り、trueに戻ります。しかし、2つの参照型の変数であれば、2つの場合に分けられます。1)それらは同じオブジェクトを指し、結果としてtrueを返します。2)それらは異なるオブジェクトを指し、オブジェクトの内容が同じでも、結局falseに戻ります。以下の手順では、2つの変数が等しいかどうかを演算子で比較した結果を示します。

public class Test {
 public static void main(String[] args) {
  int a = 5;
  int b = 5;
  String s1 = "helloJava";
  String s2 = "helloJava";
  String s3 = "hello"+"Java";
  String s4 = "hello";
  String s5 = "Java";
  String s6 = s4 + s5;
  String s7 = new String("helloJava");
  System.out.println("a==b?: "+(a==b));
  System.out.println("s1==s2?: "+(s1==s2));
  System.out.println("s1==s3?: "+(s1==s3));
  System.out.println("s1==s6?: "+(s1==s6));
  System.out.println("s1==s7?: "+(s1==s7));
  System.out.println("s1.equals(s6)?: "+(s1.equals(s6)));
  System.out.println("s1.equals(s7)?: "+(s1.equals(s7)));
 }
}
実行結果は:
a==btrue
s 1==s 2true
s 1==s 3true
s 1==s 6false
s 1==s 7false
s 1.equals(s 6)true
s 1.equals(s 7)true
結果分析:2つのintタイプのaとbは同じで、多くの説明が必要ではない。s 1、s 2、s 3で参照した文字列はコンパイル期間中に決定されました。したがって、それらはすべて定数プールの同じ文字列オブジェクトを参照します。s 6対応する文字列の値はコンパイル中に確定できません。s 7はnewコンストラクタを使用して新たなStringオブジェクトを作成します。s 7はヒープメモリに作成されたStringオブジェクトを参照して、定数プールにはありません。String文字列の作成と保存の仕組みについては、以下に紹介します。公衆番号を一番上に置いて、第一時間視聴してください。
2.equals()方法
equals()メソッドはObjectクラスが提供する方法の一つです。この方法を使って、2つのオブジェクトの等しい標準と使用==演算子の違いはないと判断しますが、どうやって「値が等しい」という判定ルールを実現しますか?答えはequalsを書き換える方法です。
StringはObjectのequals()の方法を書き換えました。Stringのequals()の方法で2つの文字列が等しいと判断する基準は、2つの文字列が含まれる文字列が等しい場合、equals()の方法で比較するとtrueに戻ります。そうでなければfalseに戻ります。
一般に、equalsを書き換える方法は、以下の条件を満たすべきである。
1)自発性:任意xに対して、x.equals(x)は必ずtrueに戻ります。
2)対称性:任意x,yに対して、x.equals(y)がtrueに戻ると、y.equals(x)も必ずtrueに戻ります。
3)伝達性:任意x,y,zに対して、x.equals(y)がtrueに戻り、y.equals(z)もtrueに戻ると、x.equals(z)も必ずtrueに戻ります。
4)整合性:任意のx,yに対して、対象の中で比較するための情報が変化していない場合、何回呼んでもx.equals(y)は、戻りの結果が一致するか、またはtrueに戻るか、falseに戻ります。
5)任意がnullではないxに対して、x.equals(null)はfalseに戻ります。
実際のアプリケーションでは、しばしばビジネス自体に基づいてequals()方法を書き換える必要があり、equals()方法の実現も業務によって決定され、以下では、実際の状況に合わせた書き換えequals()方法の例を示す。

public class Person {
 private String name;//  
 private int age;//  
 private String idNum;//    
 
 public Person() {
  super();
 }
 
 public Person(String name, int age, String idNum) {
  super();
  this.name = name;
  this.age = age;
  this.idNum = idNum;
 }

 //  equals  
 public boolean equals(Object obj){
  //            ,  true
  if(this == obj){
   return true;
  }
  //obj Person  
  if(obj!=null && obj.getClass()==Person.class){
   Person p = (Person)obj;
   //                 
   if(this.idNum.equals(p.getIdNum())){
    return true;
   }
  }
  return false;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getIdNum() {
  return idNum;
 }

 public void setIdNum(String idNum) {
  this.idNum = idNum;
 }

 public static void main(String[] args) {
  Person p1 = new Person("  ", 14, "zs14abc");
  Person p2 = new Person("  2", 15, "zs14abc");
  Person p3 = new Person("  ", 14, "zs14abc2");
  System.out.println("p1.equals(p2)?: "+(p1.equals(p2)));
  System.out.println("p1.equals(p3)?: "+(p1.equals(p3)));
 }

}
実行結果:
p 1.equals(p 2)true
p 1.equals(p 3)false
皆さんは分かりました。オンラインではequals()という表現が多いです。この言い方はあまり正確ではないです。equals()の方法を書き換えてもいいです。それらをどのように同等にしたいですか?極端な場合はPersonの対象のPigオブジェクトを等しくしてもいいです。
初心者の記憶を容易にするために、演算子は2つの変数の値が等しいかどうかを比較するために使用されます。equals()方法は、2つのオブジェクトのコンテンツが同じかどうかを比較するために使用される。
以上述べたのは小编が绍介したjava==演算子とequals()方法の违いを详しく整理して、皆さんに助けてほしいです。ここでも私たちのサイトを応援してくれてありがとうございます。