等価は英語でequivalentといいます。
Javaではequals
メソッドを用いてobj.equals(obj2)
と記述します。
このとき、2つのオブジェクトの内容が同じであればtrue,異なればfalseとなります。
2つのオブジェクトが同じインスタンスを指していなくても、内容的に同じであればtrueとなります。
しかしながら、何を以って”同じ”とするかは開発者の判断に委ねられています。
そのため、開発者はequals
メソッドをオーバーライドして等価とみなして良い条件を記述する必要があります。
以下のようにオーバーライドします。
Java
public class Person {
String name; //名前
int age; //年齢
String birthplace; //出身地
//コンストラクタ
public Person(String name, int age, String birthplace) {
this.name = name;
this.age = age;
this.birthplace = birthplace;
}
//ゲッターセッター
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 getBirthplace() {return birthplace;}
public void setBirthplace(String birthplace) {this.birthplace = birthplace;}
@Override
public String toString(){
return name + "," + age + "," + birthplace;
}
@Override
public boolean equals(Object o){
//渡されたオブジェクトがnullの場合は、falseを返す。
if(o == null) return false;
//渡されたオブジェクトが継承関係に無ければ、falseを返す。
if(!(o instanceof Person))return false;
//渡されたオブジェクトが自分と同じインスタンスの場合は、trueを返す。
if(this == o) return true;
Person p = (Person) o;
//名前が同一であればtrueを返す。
if(this.name.equals(p.name))return true;
//ここまで到達すればfalseを返す。
return false;
}
}
では、オブジェクトを生成して実際に比較してみます。
Java
//Personクラスのオブジェクトを生成。
Person p1 = new Person("Trump", 72 , "USA");//ドナルド・トランプ大統領
Person p2 = new Person("Trump", 65 , "Japan");//ドナルド・トランプ大統領
Person p3 = new Person("Sinzo", 65 , "Japan");//安倍晋三首相
//Personクラスのオブジェクトp1とp2を比較する。
System.out.println("p1とp2を比較:" + p1.equals(p2));
//Personクラスのオブジェクトp1とp2を比較する。
System.out.println("p1とp3を比較:" + p1.equals(p3));
実行結果
p1とp2を比較:true
p1とp3を比較:false
等値は英語でequalityといいます。
Javaでは==
演算子を用いてobj1==obj2
と記述します。
このとき、2つのオブジェクトが同じインスタンスを指していればtrue,異なるインスタンスであればfalseになります。
(内容的に同じ値が入っていたとしてもインスタンスが異なればfalseとなります。)
では、オブジェクトを生成して実際に比較してみます。
Java
//Personクラスのオブジェクトを生成。
Person p1 = new Person("Trump", 72 , "USA");//ドナルド・トランプ大統領
Person p2 = new Person("Trump", 72 , "USA");//ドナルド・トランプ大統領
Person p3 = p1;
//Personクラスのオブジェクトp1とp2を比較する。
System.out.println(p1 == p2);
//Personクラスのオブジェクトp1とp3を比較する。
System.out.println(p1 == p3);
実行結果
false
true
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!