-
[Java] equals 와 ==의 차이점Java 2021. 11. 3. 18:15728x90
개요
알고리즘 문제를 풀다 ==의 경우에 풀리지않고 equals를 써야 풀리는 부분이 있어 궁금해서 찾아보게 되었습니다.
공통점
이 둘은 모두 양쪽의 내용을 비교하여 boolean type으로 반환한다는 공통점을 가집니다.
차이점
1) 형태의 차이 - (메소드와 연산자)
equals() 는 메소드 이며 == 은 비교를 위한 연산자입니다.
2) 주소값 비교와 내용 비교
equals 메소드는 대상의 내용 자체를 비교하지만, == 연산자는 비교하고자 하는 대상의 주소값을 비교합니다.
*Object 클래스에서는 주소값을 비교하지만 String클래스에서는 equals 메소드를 오버라이딩하여 내용을 비교하도록 합니다.
실습
예를 들어, String 클래스를 이용해 문자열을 생성해보겠습니다.
String a = "aaa"; String b = a; String c = new String("aaa");
a,b,c, 모두 "aaa"라는 내용을 가지고 있지만 주소값에 대해서는 다른 값을 가지는 변수가 존재합니다.
a의 경우는 임의로 주소값 500을 가진다고 가정하면
b의 경우에도 주소값 500을 가질것이지만
c의 경우에는 새로운 주소값인 600(임의값)을 가질 것 입니다.
이제 equals와 == 를 사용하면 어떻게 출력이 되는지 살펴보겠습니다.
System.out.println(a.equals(b)); System.out.println(a==b); System.out.println(a==c); System.out.println(a.equals(c));
첫번째는 a와b의 내용을 비교했으므로 true
두번째는 a와b의 주소값을 비교했으므로 true
세번째는 a와c의 주소값을 비교했으므로 false
네번째는 a와c의 내용을 비교했으므로 true
String Constant Pool
사실 String과 관련해서는 String Constant Pool이란 개념이 존재하는데 궁금하다면 찾아보시면 좋을 것 같습니다.
String의 Constant Pool 때문에 마법같이 다음과 같은 일이 가능해집니다.
String a = "aaa"; String b = "aaa"; System.out.println(a==b); //true
출처
'Java' 카테고리의 다른 글
[Java] 공식문서 보는 법 (0) 2021.11.07 [Java] 자바 컬렉션 프레임워크(Java Collections Framework) (0) 2021.11.07 [Java] Scanner 와 BufferedReader의 차이점 (0) 2021.11.05 [Java] 자바의 Hello World (0) 2021.10.29 [Java] 자바의 특징 (0) 2021.10.29