Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

우주코딩

String 클래스, 문자열 리터럴, String 클래스와 equals() 메서드, hashCode() 메서드, toString() 메서드, mutable vs immutable 본문

자바 본 강의

String 클래스, 문자열 리터럴, String 클래스와 equals() 메서드, hashCode() 메서드, toString() 메서드, mutable vs immutable

우주코딩 2021. 8. 10. 22:32

String 클래스

String 레퍼런스

  • String은 자바 기본 타입이 아니다.
  • 클래스이다.
String s1;

s1은 String 인스턴스 주소를 담는 레퍼런스이다.

String 인스턴스

  • 힙에 문자 코드를 저장할 메모리를 만들고 그 주소를 리턴한다.
  • 내용물의 동일 여부를 검사하지 않고 무조건 인스턴스를 생성한다.
  • 가비지가 되면 가비지 컬렉터에 의해 제거된다.

문자열 리터럴

String s1 = "Hello";
  1. Method Area영역에 String 인스턴스 생성
  2. 기존에 같은 문자열이 이미 있다면 기존 인스턴스의 주소를 리턴한다.메모리 절약을 위해 중복 데이터를 갖는 인스턴스를 생성하지 않는다.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 객체이다.

Comments