룰루랑랑
[Java] String 문자열 처리 2 - 문자열 비교하기 본문
안녕하세요. 룰루랑랑입니다.
오늘은 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번 하게 되는 것이죠.
선 무당이 사람 잡는다!
이 문구를 많이 들어보셨을 것입니다.
작은 것 하나도 놓치지 않고 공부를 해서 훌륭한 프로그래머가 되도록 노력해야겠습니다.
오늘 포스팅은 여기까지 입니다.
부족한 포스팅 읽어주셔서 감사합니다. ^.^
'Java 레시피' 카테고리의 다른 글
[Java] String 문자열 처리 5 - 문자열을 숫자로 바꾸기(feat. valueOf(), parseInt()) (0) | 2016.12.06 |
---|---|
[Java] String 문자열 처리 4 - 문자열 붙이기(concat, +, append) (2) | 2016.12.06 |
[Java] String 문자열 처리 3 - 공백 제거하기 Trim (0) | 2016.11.25 |
[Java] String 텍스트 처리 1 - 텍스트 자르기 (0) | 2016.11.23 |