Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

룰루랑랑

[Java] String 문자열 처리 2 - 문자열 비교하기 본문

Java 레시피

[Java] String 문자열 처리 2 - 문자열 비교하기

개발토끼 2016. 11. 24. 17:10

안녕하세요. 룰루랑랑입니다. 


오늘은 String 문자열 비교하는 방법에 대해서 알아보겠습니다. 


사실, 문자열 비교는 다들 잘 아시는 방법일 것이라고 생각합니다. 


보통 이런 코드를 통해 비교하시겠죠.

public class Main{
public static void main(String[] args){
      String hi = "hi";
      
      if(hi == "hi"){
          System.out.println("두 문자열이 동일 합니다.");
      }else{
          System.out.println("두 문자열이 다릅니다.");
      }
}

물론 이런 방식을 많이 취하는 건 사실입니다. 


하지만, 이 방식은 권장하지 않습니다. 


그 이유는 == 연산자는 비교 대상들의 주소값(메모리 주소)을 비교하기 때문입니다. 


만약 임의의 "hi"라는 주소값이 다른 텍스트와 비교했을 때는 같은 문자열임에도 불구하고 문자열이 다르다고 출력할 것입니다. 


한번 이러한 상황을 구현해보죠. 

public class Main{
    public static void main(String[] args){
        String hi = "hi";
        String newHi = new String("hi");

        System.out.println("첫번째 하이 : " + hi);
        System.out.println("두번째 하이 : " + newHi);

        if (hi == newHi) {
            System.out.println("두 문자열이 동일 합니다.");
        } else {
            System.out.println("두 문자열이 다릅니다.");
        }
    }
}

위의 예제를 실행하면 다음과 같아요. 


첫번째 하이 : hi

두번째 하이 : hi

두 문자열이 다릅니다.


둘다 동일한 hi 임에도 두 문자열이 다르다고 표현합니다. 


결국 == 연산자는 변수 내용의 동일성을 분석하는 도구이기 보다 메모리 주소값의 동일성을 분석하는 도구라는 것이죠.


그래서 우리는 String.java 내부에 있는 equals라는 메소드를 사용해야 합니다. 

public class Main {
    public static void main(String[] args) {

        String hi = "hi";
        String newHi = new String("hi");

        System.out.println("첫번째 하이 : " + hi);
        System.out.println("두번째 하이 : " + newHi);

        if (hi.equals(newHi)) {
            System.out.println("두 문자열이 동일 합니다.");
        } else {
            System.out.println("두 문자열이 다릅니다.");
        }
    }
}

위 코드와 같이 구현하면 앞서 == 연산자로 문자열을 분석했을 때와 결과가 달라집니다. 


첫번째 하이 : hi

두번째 하이 : hi

두 문자열이 동일 합니다.


자세히 설명드리면 == 연산자와 달리 equals() 메소드는 해당 변수들의 주소값과 관계없이 변수들이 가지고 있는 내용만 비교 분석 합니다. 


따라서, 문자열을 비교할 때는 == 보다는 equals()가 옳은 방법이죠.




제 경험상 프로그래밍을 공부하다보면 어설프게 알고 있을 경우 피보는 경우가 많았습니다. 


잘못 쓴 코드는 언젠간 고쳐야하기 때문에 일을 2번 하게 되는 것이죠. 


선 무당이 사람 잡는다!


이 문구를 많이 들어보셨을 것입니다. 


작은 것 하나도 놓치지 않고 공부를 해서 훌륭한 프로그래머가 되도록 노력해야겠습니다. 


오늘 포스팅은 여기까지 입니다. 


부족한 포스팅 읽어주셔서 감사합니다. ^.^