본문 바로가기
Java/Java

[자바의 정석_기초편] Chapter09. java.lang package / Useful class_1

by HJ0216 2023. 5. 14.

이 글은 남궁성의 정석코딩 [자바의정석-기초편] 수강하며 정리한 글입니다.

 

 

🟣 기본 환경: 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

 

 

 

 

 

소스 코드

🔗 HJ0216/java-practice

 

참고 자료

📑 자바의 정석 9장 - Object 클래스 - equals ()

📑 [자바] equals, hashcode 같이 오버라이딩 하는 이유