- Object
Object는 모든 클래스의 최상위 클래스
모든 클래스는 Object를 상속받음
모든 클래스는 Object의 메소드를 호출할 수 있음
Object에 어떤 메소드가 있는지, 어떤 기능을 수행하는지 알아보자
- boolean equals(Object obj)
기본 동작
오버라이드 이전(동일성): boolean을 반환, 두 객체의 참조 변수의 주소가 같으면 true, 아니면 falase
오버라이드 이후(동등성): boolean을 반환, 두 객체가 다른 객체여도 동등한 내용(값)을 갖고있다면 true를 반환하고 다르다면 false를 반환한다.
목적
TMI
코드
package com.programmers.java.test;
import java.util.Objects;
public class Arsenal {
private String name;
public Arsenal(String str){
this.name = str;
}
@Override
public boolean equals(Object obj) {
return this.name == ((Arsenal)obj).name;
}
public static void main(String[] args) {
Arsenal a = new Arsenal("아스날");
Arsenal b = new Arsenal("아스날");
if(a.equals(b)) {
System.out.println("True");
}
else {
System.out.println("False");
}
String str1 = "Arsenal";
String str2 = "Arsenal";
if(str1.equals(str2)) {
System.out.println("True");
}
else {
System.out.println("False");
}
}
}
/*오버라이드 이전: equals()가 동일성을 보기 때문에 두 객체의 내용(값)이 같아도 주소가 다르면 False 반환*/
> Task :Arsenal.main()
False
True
/*오버라이드 이후: equals()가 동등성을 보기 때문에 두 객체의 내용(값)이 같아서 모두 True 반환*/
> Task :Arsenal.main()
True
True
- String toString()
기본 동작
클래스명@16진수 해시코드
로 구성된 문자열 정보를 반환한다목적
코드
public class Arsenal {
private String name;
public Arsenal(String str){
this.name = str;
}
@Override
public String toString(){
return "이 객체의 이름은 " + this.name;
}
public static void main(String[] args) {
Arsenal a = new Arsenal("아스날");
System.out.println(a.toString());
}
}
/*결과*/
> Task :Arsenal.main()
이 객체의 이름은 아스날
- int hashCode()
기본 동작
목적
오버라이드 이전(동일성): 객체의 동일성을 확인하기 위한 목표
hashCode
메소드는 객체의 주소값을 이용해서 해시코드를 만들어 반환하기 때문에 서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다.오버라이드 이후(동등성): 두 개의 서로 다른 메모리에 위치한 객체가 동등성을 갖기 위해 구현한다.
즉 객체를 구별하기 위해 고유한 정수값으로 출력시켜주는 메소드
코드
package com.programmers.java.test;
import java.util.Objects;
public class Arsenal {
private String name;
public Arsenal(String str){
this.name = str;
}
@Override
public int hashCode() {
return Objects.hash(name);
}
public static void main(String[] args) {
Arsenal a = new Arsenal("아스날");
Arsenal b = new Arsenal("아스날");
System.out.println(a.hashCode());
System.out.println(b.hashCode());
}
}
/*오버라이드 이전: a.hashCode()와 b.hashCode()의 결과값 */
> Task :Arsenal.main()
681842940
1392838282
/*오버라이드 이후: a.hashCode()와 b.hashCode()의 결과값 */
> Task :Arsenal.main()
50120415
50120415