항상 자바를 공부하다 보면 항상 헷갈리는 부분이 ==과 eqauls의 차이에 대한 것이다.
매번 찾아보지만 또 까먹은 김에 아예 글을 작성하게 되었다.
간단하게 결론부터 이야기 하자면 ==의 경우 주소값(Call by Reference)까지 비교하는 연산자이고 equals의 경우 값(Call by Value)만 비교하는 메소드이다.
예를 들어
String str1 = "abc";
Stirng str2 = new String("abc");
이 두개의 값을 비교해보자
str1의 경우 리터럴을 사용하여 선언하였기에 string constant pool이라는 영역에 존재하게 되고
str2의 경우 new를 통해 String을 생성했기에 Heap 영역에 존재하게 됩니다.
따라서 당연히 두 값의 주소값은 달라질 것이기에 아래와 같은 결과가 나오게 됩니다.
str1 == str2; // false!!
str1.equals(str2); // true!!
따라서 평상시 자바에서 String을 비교할때에는 equals를 사용해야한다!!
참고
https://coding-factory.tistory.com/536