우주코딩
String 클래스, 문자열 리터럴, String 클래스와 equals() 메서드, hashCode() 메서드, toString() 메서드, mutable vs immutable 본문
자바 본 강의
String 클래스, 문자열 리터럴, String 클래스와 equals() 메서드, hashCode() 메서드, toString() 메서드, mutable vs immutable
우주코딩 2021. 8. 10. 22:32String 클래스
String 레퍼런스
- String은 자바 기본 타입이 아니다.
- 클래스이다.
String s1;
s1은 String 인스턴스 주소를 담는 레퍼런스이다.
String 인스턴스
- 힙에 문자 코드를 저장할 메모리를 만들고 그 주소를 리턴한다.
- 내용물의 동일 여부를 검사하지 않고 무조건 인스턴스를 생성한다.
- 가비지가 되면 가비지 컬렉터에 의해 제거된다.
문자열 리터럴
String s1 = "Hello";
- Method Area영역에 String 인스턴스 생성
- 기존에 같은 문자열이 이미 있다면 기존 인스턴스의 주소를 리턴한다.메모리 절약을 위해 중복 데이터를 갖는 인스턴스를 생성하지 않는다.JVM이 끝날 때까지 메모리에 유지된다.
intern()
- 지정된 String 객체를 상수풀에서 찾는다.
- 있으면 그 String 객체의 주소를 리턴한다.
- 없으면 상수풀에 String 객체를 생성한 후 그 주소를 리턴한다
String s1 = new String("Hello");
String s2 = "Hello";// 상수풀에 String 객체 생성
String s3 = s1.intern();
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // true
String 클래스와 equals() 메서드
equals()?
- Object에 정의되어 있는 메서드이다.
- 인스턴스가 같은지 비교한다.
String의 equals()?
- Object에서 상속 받은 것을 오버라이딩하였다.
- 문자열이 같은지 비교한다.
String 클래스와 hashCode() 메서드
Object 의 hashcode 는 레퍼런스마다 다르다.
그러나, String의 hashCode()은 문자열이 같으면 같은 hashCode()를 리턴하도록 오버라이딩 하였다.
- 문자열이 같은 경우 같은 객체로 다루기 위함이다. HashSet 에서 객체를 저장할 때 이 메서드의 리턴 값으로 저장 위치를 계산한다.
- HashMap이나 Hashtable에서는 Key를 다룰 때 이 메서드의 리턴 값을 사용한다. 보통 equals()를 함께 오버라이딩 한다.
String 클래스의 toString() 메서드
Object.toString()은 "클래스명@해시값" 을 리턴한다.
String은 상속 받은 toString()을 오버라이딩 했다.
=> this 주소를 그대로 리턴한다.
mutable vs immutable
String 객체는 immutable 객체이다.
즉, 한 번 객체에 값을 담으면 변경할 수 없다.
원본을 바꿀 수 없다.
처음에 한번 만들어지면 안의 내용물은 바꾸지 못한다 = immutable 객체
StringBuffer 는 mutable 객체이다.
'자바 본 강의' 카테고리의 다른 글
인터페이스 정의, 구현하기 , default 메서드, private & static 메서드 (0) | 2021.08.12 |
---|---|
wrapper 클래스, 오토박싱(auto-boxing)/오토언박싱(auto-unboxing) (0) | 2021.08.12 |
hashCode() 예시와 오버라이딩하기 (0) | 2021.08.10 |
Object 클래스와 hashCode() 메서드 (0) | 2021.08.09 |
Object 클래스와 equals() 메서드 (0) | 2021.08.09 |
Comments