==와 equals의 차이점

강준우·2023년 1월 8일
0

Java에서 int와 boolean값은 ==를 통해 비교하지만
String같은 Class값의 비교는 equals()메소드를 사용한다.
이를 위해서는 먼저 변수 생성 방식을 비교해야 한다.

String 변수 생성시 주소할당


  • 리터럴을 이용한 방식
  • new 연산자를 이용한 방식

위 두 방식의 가장 큰 차이는 저장 영역에 있다.
new를 통해 생성하면 Heap 영역에
리터럴을 사용하면 string constant pool이라는 영역에 저장된다.

이때, 리터럴을 사용시 내부적으로 String의 intern()메소드가 호출되고
주어진 문자열이 string constant pool에 존재하면 그 주소값을 반환하고
없다면 string constant pool에 넣고 새로운 주소값을 반환한다.

주소값 비교(==)와 값 비교(equals)


== 연산자는 두 개의 주소값을 비교하고
equals 메소드는 두 대상의 값 자체를 비교한다.
equals는 Object에 저장된 메소드로 String 클래스가 오버라이드하여 사용한다.

==를 사용한 문자열 비교


public class compare {
   public static void main(String[] args) {
       String s1 = "apple";
       String s2 = new String("apple");
		
       if(s1 == s2) {
           System.out.println("두개의 값이 같음.");
       } else {
           System.out.println("두개의 값이 같지 않음.");
       }
   }
}

위 코드의 실행 결과는 "두개의 값이 같지 않음."이다.
참조 타입의 변수의 값은 힙 영역의 객체 주소이므로 다르다는 결론이 나온다.

equals()를 사용한 문자열 비교


public class compare {
    public static void main(String[] args) {
        String s1 = "apple";
        String s2 = new String("apple");
		
        if(s1.equals(s2)) {
            System.out.println("두개의 값이 같음.");
        } else {
            System.out.println("두개의 값이 같지 않음.");
        }
    }
}

위 코드의 실행 결과는 "두개의 값이 같음."이다.
결국 equals()를 사용하여야 데이터 값을 비교하여 정확한 결과를 얻을 수 있다.

compareTo()


compareTo()는 두개의 문자열을 비교한다.
return의 반환으로 같은지, 어떤 문자가 사전적 순서로 앞에 있는지 까지 나타낸다.

  • return 0 : 두 문자열이 동일
  • return 양수 : compareTo()를 호출하는 객체가 인자보다 사전적 순서로 앞섬
  • return 음수 : compareTo()를 호출하는 객체가 인자보다 사전적 순서로 뒤처짐
profile
강준우

0개의 댓글

관련 채용 정보