자바 (ref. 자바의정석)

문자열의 비교 - JAVA

쿠쿠s 2022. 2. 6. 15:36

 

코딩테스트에도 문자열의 비교는 자주 활용되기 때문에 따로 정리를 하게 되었습니다.

이 내용을 몰랐을때 자연스럽게 '==' 연산자를 비교하려는데 값이 같은데 다르다고 출력이 되서 당황한 적이 있습니다.

 

 

우선 String 변수를 생성할때는 리터럴을 이용한 방식과 new 를 이용한 방식이 있습니다.

 

 

1. 리터럴을 이용한 방식은 string constant pool 이라는 영역에 선언한 문자열이 이 주소값을 가집니다.

String str1 = "ddinguBlog";
String str2 = "ddinguBlog";

 

위 같은 선언은 같은 주소를 가르키기 때문에 '==' 연산자를 사용해도 같다고 출력이 됩니다.

 

 

2. new 를 이용하게 되면 '==' 연산자로는 비교를 할 수 없습니다.

String str = "ddinguBlog";
String str2 = new String("ddinguBlog");

 

그래서 두 문자열을 비교할 때 비교 연산자인 '==' 대신에 equlas( ) 라는 메서드를 사용해야 합니다.

'==' 연산자는 주소값을 비교하기 때문에 값을 같게 선언해도 가르키는 메모리의 주소가 다르면 다르다고 출력하게 됩니다. 

 

 

 

 

'==' 연산자 사용

public class StringExam {

    public static void main(String[] args) {
        String str = "ddinguBlog";
        String str2 = new String("ddinguBlog");

        if (str == str2) {
            System.out.println("같다!");
        }else{
            System.out.println("다르다!");
        }
    }
}

출력 : 다르다!

 

 

 

 

반면에 equlas( ) 메서드는 객체가 달라도 문자열의 내용이 같으면 true를 반환 합니다.

그래서 문자열을 비교할 때는 equlas( )를 사용해야 합니다!

만약 대소문자를 구별하지 않고 비교하고 싶으시면, equalsIgnoreCase( ) 를 사용하면 됩니다.

 

 

 

 

 

'equals( )' 메서드 사용

public class StringExam {

    public static void main(String[] args) {
        String str = "ddinguBlog";
        String str2 = new String("ddinguBlog");

        if (str.equals(str2)) {
            System.out.println("같다!");
        }else{
            System.out.println("다르다!");
        }

    }
}

출력: 같다!

 

 

 

 

'equalsIgnoreCase( )' 메서드 사용

public class StringExam {

    public static void main(String[] args) {
        String str = "ddinguBlog";
        String str2 = new String("DdInGuBloG");

        if (str.equalsIgnoreCase(str2)) {
            System.out.println("같다!");
        }else{
            System.out.println("다르다!");
        }

    }
}

출력: 같다!

'자바 (ref. 자바의정석)' 카테고리의 다른 글

배열의 복사 - JAVA  (0) 2022.02.08
for each 문 - JAVA  (0) 2022.02.07
상수와 리터럴 - JAVA  (0) 2022.02.05
변수란? - JAVA  (0) 2022.02.04
자바언어의 특징  (0) 2022.02.04