@Data는 @ToString, @EqualsAndHashCode, @Getter,Setter, @RequiredArgsConstructor를 모두 결합한 형태이다.
자주 사용되는 모든 메서드들을 생성할 수 있다는 장점이 있다.
@EqualsAndHashCode : equals(), hashCode() 메서드 생성
hashCode 가 뭔데... 써본 적 없어.
hashCode라면 객체 주소값을 말하는건가 싶었는데 아닌 듯 하다.
Test t = new Test();
System.out.println(t); // com.hello.Test@4d157493
System.out.println(t.hashCode()); // 1293251731
// 혹싀.... 단순히... 4d157493 라는 값이 나오려나 싶었던거다..
hashCode()는 객체의 hashCode를 리턴한다. 해시 알고리즘에 의해 생성된 정수 값이다.
equals가 true라면 두 객체의 hashCode는 같은 값을 반환해야 한다.
그런데, equals가 false라고해서 두 객체의 hashCode는 다른 값을 반환할 필요는 없다.
왜?????????????????????????
hashCode 를 따라가 봤는데 이런식으로 되어있음
public static int hashCode(byte[] value) {
int h = 0;
for (byte v : value) {
h = 31 * h + (v & 0xff);
}
return h;
}
문자열에서 한 글자씩 가져와서 어캐어캐해서 정수값으로 변경하고 있다는 것임
이런 구현 방식으로는 hashCode가 같아질 수 있단 거임.
그렇기 때문에 hashCode가 같더라도 equals가 false 일 수 있다는 것.
String a = "Z@S.ME"; // -1656719047
String b = "Z@RN.E"; // -1656719047
String c = new String("Hi");
String d = new String("Hi");
System.out.println(c.hashCode()); // hashCode가 같은 c와 d
System.out.println(d.hashCode()); // 왜냐면 문자열이 같으니까, equals는 true니까
'백엔드개발자 > JAVA' 카테고리의 다른 글
StringUtils (0) | 2022.09.25 |
---|---|
getSession(), getSession(true), getSession(false) (0) | 2022.07.19 |
프로세스, 스레드 (0) | 2022.05.10 |
Math 클래스 (0) | 2022.05.05 |
Map (0) | 2022.04.25 |