728x90
Object 클래스 : 모든 클래스의 최상위 클래스
주요 메소드 equals, toString, hashCode :" 오버라이딩" 해서 사용
equals : 객체가 가진 값을 비교할때 사용한다.
기준 : 메서드를 오버라이딩해서 기준을 개발자가 정의해줘야 한다.
toString : 객체가 가진 값을 문자열로 반환해준다.
hashCode : 객체의 해시코드 값을 반환시켜준다.
해시코드 : 자료구조에서 주로 사용
자동으로 생성 가능하게 만들어주는 도구들이 있다.
클래스를 정의,
public class Student{
String name;
String number;
int birthYear;
public static void main(String[] args){
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "1234";
s1.birthYear = 1994;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "1234";
s2.birthYear = 1994;
if(s1.equals(s2))
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");'
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
메소드가 Object가 구현한 메소드를 그대로 사용해서 그렇다
오버라이딩을 해보면,
public Student{
String name;
String number;
int birthYear;
@Override
public int hashCode() {
final int prime = 31; //소수
int result = 1;
result = prime * result + ((number == null) ? 0 : number.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == null)
return false;
if(getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if(number == null) {
if(other.number != null)
return false;
}else if (!number.equals(other.number))
return false;
return true;
}
public static void main(String[] args){
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "1234";
s1.birthYear = 1994;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "1234";
s2.birthYear = 1994;
if(s1.equals(s2))
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");'
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
결과값이 같게 나온다.
해시코드도 같은 값을 출력한다.
toString 오버라이딩
public Student{
String name;
String number;
int birthYear;
@Override
public int hashCode() {
final int prime = 31; //소수
int result = 1;
result = prime * result + ((number == null) ? 0 : number.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == null)
return false;
if(getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if(number == null) {
if(other.number != null)
return false;
}else if (!number.equals(other.number))
return false;
return true;
}
//toString을 통해 속성값의 결과를 보여줄 수 있게 한다
@Override
public String toString() {
return "Student [name=" + name + , number = " + number + ", birthYear = " + birthYear]");
public static void main(String[] args){
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "1234";
s1.birthYear = 1994;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "1234";
s2.birthYear = 1994;
if(s1.equals(s2))
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");'
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
출처 : 프로그래머스 - 자바 중급
'Back > Java' 카테고리의 다른 글
[Java] StringBuffer (0) | 2022.08.06 |
---|---|
[Java] Java.lang 패키지 / 오토박싱 (0) | 2022.08.04 |
[열혈 java 프로그래밍, 윤성우] 강의 3-5강 정리 (0) | 2022.02.28 |
[열혈 java 프로그래밍, 윤성우] 자바 강의 1~2강 정리 (0) | 2022.02.25 |
[ 자바 웹 프로그래밍 Next Step] Day.01 테스트와 리팩토링의 중요성 (0) | 2022.02.23 |