JAVA에서 개발을 하다보면 객체끼리 비교해야 할 경우가 있음
아래의 코드를 직접 실행해보면 둘다 거짓이 출력됨
=================================================================================================================
MemberVO a = new MemberVO();
MemberVO b = new MemberVO();
if(a==b){
"참1";
}else{
"거짓1";
}
if(a.equals(b)){
"참2";
}else{
"거짓2";
}
=================================================================================================================
equals 는 주소값이 같은지를 비교한다.
실제로 안에 있는 값이 같은지를 비교하기위해서는 equals 를 재정의 해야함
MemberVO를 Builder 패턴으로 만들어서 equals 메소드와 hashcode 메소드를 재정의했음
equals 메소드를 재정의 할때는 hashcode 도 꼭 같이 재정의 해주자
=================================================================================================================
package com.sungchul.equals;
import java.util.Objects;
public class MemberVO {
private String username;
private String email;
private String password;
private MemberVO(Builder builder) {
this.username = builder.username;
this.email = builder.email;
this.password = builder.password;
}
public String getUsername() {
return username;
}
public String getEmail() {
return email;
}
public String getPassword() {
return password;
}
public static class Builder {
private String username;
private String email;
private String password;
public Builder setUsername(String username) {
this.username = username;
return this;
}
public Builder setEmail(String email) {
this.email = email;
return this;
}
public Builder setPassword(String password) {
this.password = password;
return this;
}
public MemberVO build() {
return new MemberVO(this);
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MemberVO memberVO = (MemberVO) o;
return Objects.equals(username, memberVO.username) &&
Objects.equals(email, memberVO.email) &&
Objects.equals(password, memberVO.password);
}
@Override
public int hashCode() {
return Objects.hash(username, email, password);
}
}
=================================================================================================================