Java에서 String값 비교시 == 과 equals()의 가장 큰 차이점은 ==사용시 주소값 비교, equals()사용시 값 비교 입니다.
String 변수 생성은 2가지 방법으로 생성할 수 있습니다.
1. 리터럴 방식
2. new 연산자 사용
- String str = "Java";
- String str2 = new String("Java");
리터럴을 사용하게 되면 string constant pool이라는 영역에 존재하게 되고 new를 통해 String을 생성하면 Heap 영역에 존재하게 됩니다. String을 리터럴로 선언할 경우 내부적으로 String의 intern() 메서드가 호출되게 되고 intern() 메서드는 주어진 문자열이 string constant pool에 존재하는지 검색하고 있다면 그 주소값을 반환하고 없다면 string constant pool에 넣고 새로운 주소값을 반환합니다.
그러므로 위 2개의 값을 비교시 아래와 같이 나옵니다.
if(str==str2) System.out.println("true")
else System.out.println("false")
if(str.equals(str2)) System.out.println("true")
else System.out.println("false")
=> false
true