이 글은 남궁성의 정석코딩 [자바의정석-기초편]을 수강하며 정리한 글입니다.
🟣 기본 환경: IDE: Eclipse, Language: Java
Boolean equals(Obhect obj): 객체 자신과 주어진 객체를 비교(T/F)
* 서로 다른 두 객체는 항상 주소가 다르므로 주소 비교시 false
→ value로 오버라이딩 해서 사용
cv: 객체마다 공통된 수로 공유된 값
iv: iv의 값을 비교할 수 있도록 equals()를 오버라이팅해야 함
hashCode()
Object class의 hashCode()는 객체의 주소를 int로 변환해서 반환
Cf. System.identityHashCode(Object obj)은 Object class의 hashCode()와 동일
* Objects.hash( ) 메소드: 매개변수로 주어진 값들을 이용해서 교유한 해시 코드를 생성
-> 동일한 값을 가지는 객체들의 필드로 해시 코드를 생성하게 되면, 동일한 해시 코드를 갖게 됨
cf. identityHashCode 메소드
만일, hash코드가 오버라이딩 된 이후 해당 객체 고유의 해시 코드 값을 알고 싶을 때 사용
equals: 주소→iv
hashcode: 주소→int
* equals의 결과가 같으면 hashcode도 같아야하므로 같이 오버라이딩 해줘야함
toString(): 객체를 문자열로 변환하기 위한 메서드
String class의 경우, 객체를 새로 생성해서 문자를 결합
예: a-0x100 b-0x200 →a+b=ab-0x300
-> 버려지는 객체 주소들이 많으므로 stringbuffer 사용
String str1 = “abc”;
String str2 = “abc”;
String str3 = new String(”abc”);
String str4 = new String(”abc”);
str1(0x100): 0x100=”abc”
str2(0x100): 0x100=”abc”
str3, str4는 새로운 객체를 생성하였으므로 주소가 다름
str3(0x200): 0x200=”abc”
str4(0x300): 0x300=”abc”
cf. 주소비교(==), 값 비교(equals),
문자열 리터럴
같은 내용의 문자열 리터럴은 하나만 만들어지며, constant pool에 저장
문자 초기화
String str = “”; // str을 빈 문자열로 초기화
String str = “”;
String str = “”; // 객체 총 1개 생성
String s = new String(””); - 객체 1개 생성
String s = new String(””); - 객체 총 2개 생성(메모리 낭비)
java.util pkg
소스 코드
참고 자료
📑 자바의 정석 9장 - Object 클래스 - equals ()
📑 [자바] equals, hashcode 같이 오버라이딩 하는 이유
'Java > Java' 카테고리의 다른 글
[자바의 정석_기초편] Chapter10. 날짜와 시간 & 형식화 (0) | 2023.05.20 |
---|---|
[자바의 정석_기초편] Chapter09. java.lang package / Useful class_2 (0) | 2023.05.17 |
[자바의 정석_기초편] Chapter08. 예외처리(Exception) (0) | 2023.05.13 |
[자바의 정석_기초편] Chapter07. 객체지향(Object Oriented)_5 (0) | 2023.05.11 |
[자바의 정석_기초편] Chapter07. 객체지향(Object Oriented)_4 (0) | 2023.05.10 |