비교
동일성 비교 : 주소값으로 비교
동등성 비교 : 객체의 속성에 담긴 값이 같으면 객체로 판단
Object
hash
hash : 어떠한 데이터를 일정한 크기의 값으로 나타내는 것
해시함수
•
어떠한 데이터를 일정한 크기의 값으로 나타내는 것
•
같은 값을 넣으면 언제나 같은 값을 반환해야 한다.
•
다른 값을 넣으면 언제나 다른 값을 반환해야 한다.
hashCode
•
인스턴스를 식별할 수 있는 식별값을 반환하는 메서드
•
만약 두 레퍼런스에 담긴 인스턴스가 같은 객체라면, hashCode 의 결과도 같아야 한다.
•
hashCode 는 this 에 대한 해시함수이다.
해시충돌
•
다른 값을 해시함수에 넣었는데 같은 해시값이 반환되는 경우
•
보통 해시함수에서는 해시충돌을 최소화 하기 위해 소수를 연산에 많이 사용한다.
•
31 은 해시함수 만들 때 적절한 크기의 소수이기 때문에 관습적으로 사용되는 값이다.
복사
heap 영역에 저장된 primitive 타입은 상관이 없지만 heap 영역에 다른 객체의 주소가 저장된 속성은 얕은 복사로 복제가 된다.
String
String
String 은 생성된 이후 값을 변경할 수 없는 불변(immutable) 객체이다.
String a = “a”; a+=”B”; “aB”
String 을 결합하여 수정할 경우, 해당 인스턴스의 값이 변경되는 것이 아니라 새로운 인스턴스를 생성한다.
같은 값의 문자열을 리터럴로 생성할 경우 등위비교 연산자를 사용하면 True 가 나온다. 리터럴로 생성할 경우 같은 값이면, 같은 객체이기 때문이다.
생성자를 사용해 String 을 생성할 경우, String Constant pool 대신 일반적인 heap 영역에 생성된다.
String constant pool 을 사용해 얻을 수 있는 메모리상 이점이 사라지게 된다.
StringBuilder
•
문자열 값을 수정하는 mutable 객체
•
thread 동기화를 지원하지 않는다.
StringBuffer
•
문자열 값을 수정하는 mutable 객체
•
thread 동기화를 지원한다.
Wrapper
Wrapper
primitive type 의 값을 객체로 다루기 위해 제공되는 클래스
primitive → wrapper
primitive | wrapper | primitive | wrapper |
byte | Byte | float | Float |
short | Short | double | Double |
int | Integer | boolean | Boolean |
long | Long | char | Character |
Integer 클래스로 선언해서, JVM 의 기본값이 null
parsing
어떠한 값을 내부 시스템에서 활용하기 위한 형태로 변경
외부와 데이터를 주고 받을 때에는 문자열로 데이터를 주고 받는다.
외부로부터 전달받은 문자열 값을 내부 시스템에서 활용하기 위한 알맞은 타입으로 변환을 진행한다.