자바에서 문자열을 비교할 수 있는 방법은 두 가지가 있는데 하나는 String 클래스의 equals 함수를 이용하는 방법과 연산자 ==를 이용하는 방법이 있습니다.
String 생성 기본 원리
apple1과 apple2를 생성하고 둘 다 "사과" 라는 값을 넣어줬습니다. 둘은 같은 주소값과 내용을 갖고 있습니다. 이는 apple1에 "사과" 라는 값을 넣어서 생성하고 그 후에 apple2를 만들었을 때 새로운 메모리에 또 다른 "사과" 를 저장하여 가리키는 것이 아니고 이미 만들어진 "사과" 라는 메모리의 주소를 가리키기 때문입니다.
== 을 통한 문자열 비교
== 으로 두 개의 문자열을 비교하면 두 객체가 가리키는 주소값이 일치하는 지를 확인해줍니다. 위에서 본 것처럼 apple1과 apple2는 같은 주소값을 같기 때문에 결과는 true가 출력됩니다.
String의 equals() 메소드
equals는 두 객체의 내용을 비교합니다. 둘 다 "사과" 라는 값을 가리키고 있기 때문에 결과는 true가 출력됩니다.
새로운 객체 String 생성
위에서는 apple1과 apple2가 하나의 주소값을 가리켰지만 이번에는 apple3라는 완전 새로운 String 객체를 생성할 것입니다.
그림처럼 new String()으로 객체를 생성할 경우 전혀 다른 새로운 주소에 "사과" 라는 내용을 넣어주고 apple3이 가리키게 합니다.
출력된 리턴값을 보면 apple1과 apple2는 서로 같은 주소값과 같은 내용을 갖고 있기 때문에 equals, == 모두 true를 리턴하지만 apple1과 apple3는 == 사용했을 때 서로 다른 주소를 가리키기 때문에 false를 리턴합니다. 하지만 세번째처럼 apple1과 apple3를 equals() 함수로 비교하면 객체의 주소가 아닌 내용을 비교하기 때문에 둘 다 같은 "사과" 라는 값을 가지므로 true를 리턴합니다.