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개의 댓글

Powered by GraphCDN, the GraphQL CDN