[JAVA]equals()メソッド(オブジェクト、String、Integerクラス、上書き)
Objects
ランクの方法では、toString()
に続いて、今回はequals()
を見てみましょう.equals()メソッド
equals()
は、2つのインスタンスのアドレス値を比較することによって同じインスタンスを決定する方法であり、同じ場合はtrue
、異なる場合はfalse
のboolean
の値を返す.ここでアドレス値を比較する場合、値が同じであれば、もちろん同じインスタンスです.例として、
Student
というクラスを作成して比較します.public class equalTest {
public static class Student {
String name;
int studentNum;
public Student (String name, int studentNum) {
this.name=name;
this.studentNum=studentNum;
}
}
public static void main(String[] args) {
Student st1 = new Student("kim",111);
Student st2 = new Student("lee",222);
Student st3= st1;
System.out.println(st1.equals(st2));
System.out.println(st1.equals(st3));
}
}
/* 출력결과
false
true
*/
st1
およびst2
は異なる例であることが明らかである.st3
はst1
からコピーされたものであり、st1
と同じアドレス値を指す.したがって、同じインスタンスを共有します.ただし、アドレスが同じ(物理的に同じ)場合、論理的に2つのインスタンスが同じと判断された場合、equals()を再定義することができる.
論理的に同じ2つのインスタンスは?
作成したばかりのStudioオブジェクト
Student st4= new Student("kim",111);
を使用して、新しいオブジェクトを作成します.では、st4
とst1
の名前と学号は同じ学生です.st1
とst4
が指す例は異なるが、論理的には同じ学生である.この場合、st 1とst 4を同じ学生として扱うのが正しい結果である.したがって、
equals()
は、プログラム上でも同様の判断ができるように過度に調整されるべきである.再定義されたequals()
String
クラスおよびInteger
クラスでは、equals()
メソッドが再定義されているので、Student
クラスのequals()
メソッドを上書きするために使用される.まず、equalsがStringクラスとIntegerクラスでどのように動作するかを理解しましょう.
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
System.out.println(str1.equals(str2));
Integer num1 = 100;
Integer num2 = 100;
System.out.println(num1.equals(num2));
}
/*출력결과
true
true
*/
str1
およびstr2
は同じ内容であるが、インスタンスアドレスは異なる.しかしequals
で比較すると、結果は同じです.このことから,String型のequals()は,2つのオブジェクトの内容が同じであれば同じと考える.num1
とnum
2も同様であり、変数に割り当てられた値が同じであればInteger型ではインスタンスのアドレス値ではないと考えられる.equals()を使用して再定義
次に示すように、Studioクラスのequals()を再定義するために使用できます.
@Override
public boolean equals(Object obj) {
if (obj instanceof Student) { //비교대상이 Student형이면
Student std = (Student)obj;
if(this.studentId == std.studentId)
return true; //학번이 같으면 같은 사람
else
return false;
}
return false;
}
Reference
この問題について([JAVA]equals()メソッド(オブジェクト、String、Integerクラス、上書き)), 我々は、より多くの情報をここで見つけました https://velog.io/@kekim20/JAVA-equals메서드-Object-String-Integer클래스와-오버라이딩テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol