[JAVA]JAVA에서 String을 비교할 때 equals()메소드로 비교하는 이유

정호석·2022년 3월 28일
0

1. equals()메소드란 무엇일까?

equals()란 매개변수로 객체의 참조변수 를 받아서 비교하여
그 결과를 boolean(true or false) 값으로 알려 주는 역할을 합니다.

[참조 타입(Reference type) 변수]

기본 타입을 제외하고 배열, 열거, 클래스, 인터페이스 등을 말한다.
참조 타입의 변수에는 객체(메모리)의 번지(주소)가 저장된다.

2. ==연산자 예시

	public static void main(String[] args){
        public static void main(String[] args){
        String a = "hello";
        String b = "hello";
        String c = "hi";
        String p1 = new String("man");
        String p2 = new String("woman");
        String p3 = new String("man");
        
        System.out.print(p1==p2);   //false
        System.out.print(p1==p3);   //false
        System.out.print(a==b);     //true
        System.out.print(a==c);     //false
        System.out.println("(주소값이 다르기 때문에 false)");
        System.out.println("(주소값이 다르기 때문에 false)");
        System.out.println("(JVM이 자동으로 같은 값을 인지해서 참조값(주소값)을 같게 설정해주기 때문에 true - String pool)");
        System.out.println("(값이 다르기 때문에 참조값이 연결이 되지 않아서 false)");

    }

    }
  • p1과 p2를 비교시 값이 다른데 애초에 다른 객체로 생성이 되어
    참조값이 달라서 결과는 false입니다.
  • p1과 p3를 비교시 위와 다르게 값은 같은 값이지만 이 또한 참조값이 다르기때문에
    결과는 false입니다.
  • a와 b를 비교시 값이 같기 때문에 JVM에서 참조변수이지만 값이 같기때문에 a에 넣어주기 위해
    할당해준 hello라는 이름의 방을 b에 재활용 하는 셈이됩니다. 이를 (string pool이라고 합니다) 그리하여 같은 참조값을 가지기 때문에 결과는 true입니다.
  • a와 c를 비교시에는 값이 다르기 때문에 위처럼 string pool이 적용이 되지않아 서로 다른 참조값을 부여받으므로 결과는 false 입니다.

3. String을 equals()메소드로 비교해야 하는 이유

위에서 보신것과 같이 ==, != 연산자는 String의 값(value)을 비교하지 않고
그 참조값을 비교하기 때문에 해당 객체의 값을 비교해주는 equals()메소드를 사용해야합니다.

4. equals()메소드 예시

public static void main(String[] args){
        String a = "hello";
        String b = "hello";
        String c = "hi";
        String p1 = new String("hello");
        String p2 = new String("woman");
        String p3 = new String("hello");
        // equals() 메소드는 값을 비교하기 때문에 아래와 같은 결과를 얻을 수 있습니다.
        System.out.println(a.equals(b));    //true
        System.out.println(a.equals(c));    //false
        System.out.println(a.equals(p1));   //true
        System.out.println(p1.equals(p2));   //false
        System.out.println(p1.equals(p3));   //true
        }

2번에서 보신 예제와는 다르게 equals메소드는 참조값이 아니라 해당 변수 혹은 객체의 값(Value)를 가지고 비교를 하기 때문에 위와 같은 결과를 보여주게 됩니다.

profile
welcome

0개의 댓글