ImmutableStrings 클래스에 name 변수와 anotherName 변수는 문자열 "John"을 대입했다.
name과 anotherName 메모리에 각각 "John"을 생성한다고 생각하지만, 그렇지 않다.
name과 anotherName은 메모리의 String pool에 있는 동일한 John을 가르킨다.
만약 String이 불변이 아니었으면 name을 "Carl"로 변경하면 anotehrName도 변경될 위험이 있을 것이다.
여기서 aThirdName이라는 새로운 변수에 new String("John")을 대입하여 name과 aThirdName을 비교하였다. 그 결과는 같지 않다고 나오는데,
그 이유는 new String 키워드를 사용하면 String Pool이 아닌 새로운 객체에 John을 생성하기 때문에 같지 않다는 것이다.
자바에서 여러 쓰레드가 실행될 때 John이라는 String 객체는 읽기는 가능하지만 변경불가능한 보안적으로 안전하다.
[출처] : https://www.youtube.com/watch?v=Bj9Mx_Lx3q4&list=TLPQMTUxMDIwMjI-0ze2xaE6FQ&index=1