String str1 = "JAMES";
String str2 = "JAMES";
System.out.println(str1 == str2); // true
String에서 문자열 리터럴을 선언할 때 리터럴이 같으면 변수는 같은 참조값(주소 값)으로 할당을 받게 된다. 따라서 '==' 연산자를 사용했을 때 true를 반환한다.
String str1 = "JAMES";
String newStr = new String("JAMES");
System.out.println(str1 == newStr); //false
반면 객체를 생성하는 방식은 아래 그림과 같이 새로운 참조값(주소값)으로 할당을 받는다. 따라서 '==' 연산자에서 false를 반환한다.
char a = '안';
char b = '녕';
String test = "" + a + b;
System.out.println(test); // 안녕
참조: [JAVA 파헤치기] 문자 타입 'char' 와 문자열 'String' 의 진실
참조: 자바 to String 이란??