우선 String은 불변성(immutable)의 특성이 있다고 말씀드렸었습니다. 이 말이 무슨 말일까요??
System.out.println(s.hashCode());
s += " 저는 ";
System.out.println(s.hashCode());
s += "씨네 입니다.";
System.out.println(s.hashCode());
System.out.println(s);
String t = "안녕하세요. 저는 씨네 입니다";
System.out.println(s == t);
System.out.println(t.hashCode());
String s = "안녕하세요.";
System.out.println(s.hashCode());
s += " 저는 ";
System.out.println(s.hashCode());
s += "씨네 입니다.";
System.out.println(s.hashCode());
자 먼저 문자열 s에 "안녕하세요."의 값을 넣어주고 s에 다른 값을 추가로 넣어주었습니다.
그런데 각각의 주소값을 hashCode()를 이용해서 알아봤더니 주소값이 다 다릅니다.
System.out.println(s);
s를 출력시켜보니 연산은 정상적으로 이루어졌습니다.
앞서 말씀드렸다시피 String은 immutable의 특성을 가지고 있습니다.
s라는 문자열 객체가 생기면 s에 연산이 진행되면 s의 값이 바뀌는 것이 아니라 새로운 s가 만들어지는 것입니다.
즉, String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽을 수만 있고 변경할 수는 없습니다.
String t = "안녕하세요. 저는 씨네 입니다";
System.out.println(s == t);
System.out.println(t.hashCode());
그런 다음 똑같은 값이 담긴 t를 생성했습니다.
s와 t를 비교했을 때 false가 출력됩니다.
t는 String pool에 떠다니는 주소값을 가져왔고 s는 연산을 통해 만들어진 주소값을 가져왔기 때문입니다.
이번에는 StringBuffer()에 대해 알아보겠습니다. String과 다르게 StrungBuffer는 가변성(mutable)의 특성을 가지고 있습니다.
StringBuffer sb = new StringBuffer();
System.out.println(sb.hashCode());
sb.append("안녕하세요").append(" 저는 ").append("씨네 입니다");
System.out.println(sb.hashCode());
System.out.println(sb);
StringBuffer 클래스는 java.lang 패키지 안에서 제공되고 있습니다.
StringBuffer 클래스를 사용하기 위해 객체를 생성해 주고 생성된 객체에 append()메소드를 이용해 문자열을 추가해 주었습니다.
문자열 추가한 sb와 문자열 추가 후 sb의 hashCode를 비교해 봤을 때 동일한 주소값을 가지고 있습니다.
StringBuffer는 인스턴스의 값을 자유롭게 변경할 수 있는 가변성이기 때문입니다.
'Java 관련 > Java' 카테고리의 다른 글
[Java] java.lang.String api 활용하기 (0) | 2021.10.31 |
---|---|
[Java] Split() & StringTokenizer() (0) | 2021.10.30 |
[Java] String pool(스프링 풀) (0) | 2021.10.28 |
[Java] Calendar 클래스를 이용한 달력(calendar) (0) | 2021.10.27 |
[Java] 달력(calendar) 만들기 (1) | 2021.10.26 |