안녕하세요. 제임스 입니다.
이번에는 자바에서 문자열 비교방법에 대해 알아보고 차이점에 대해서도 알아 보겠습니다.
■ Primitive Type(기본형) 비교
String a = "test";
String b = "test";
위와 같이 기본형 문자열이 두개 있습니다.
모두 test 라는 값을 가지고 있습니다.
이를 비교 하는 방법은 "==" 연산자 와 "equals()" 함수 두가지 정도 있습니다.
사용방법은 아래와 같습니다.
if(a == b){
System.out.println("a == b");
}else {
System.out.println("a != b");
}
if(a.equals(b)){
System.out.println("a equals to b");
}else {
System.out.println("a not equals to b");
}
변수 a, b 모두 primitive type (기본형) 으로 정의 되어 "==" 연산자를 사용하거나 "equals()" 함수를 사용하더라도 동일한 결과를 리턴받습니다. 위의 코드를 실행 시키면 아래와 같은 결과를 리턴 받습니다.
a == b
a equals to b
■ Reference Type(참조형) 비교
만약 변수를 reference type (참조형) 으로 정의 하면 어떻게 될까요?
String c = new String("test");
String d = new String("test");
변수 c, d 모두 "test" 라는 값을 가지는 reference type 으로 정의를 했습니다.
단순히 c 와 d 값을 찍어 보겠습니다.
System.out.println("c = ["+c+"]");
System.out.println("d = ["+d+"]");
결과를 보면 아와 같이 동일하게 test 라는 값을 리턴 시켰습니다.
c = [test]
d = [test]
하지만 "==" 와 "equals()" 를 이용하여 비교 하였을때 결과는 어떨까요?
if(c == d){
System.out.println("c == d");
}else {
System.out.println("c != d");
}
if(c.equals(d)){
System.out.println("c.equals(d)");
}else {
System.out.println("!c.equals(d)");
}
c != d
c.equals(d)
if(c == d) 라는 조건식의 결과가 c != d 라고 나왔습니다.
왜 다르다는 걸까요?
가지고 있는 value 값은 "test"로 동일하게 보이지만 c 와 d 의 경우 서로 다른 메모리 값을 가지고 있으며 이 메모리 주소값이 다르기 때문에 다른 값이라는 결과를 리턴 시켜 줍니다.
즉, Reference Type 의 경우 c == d 라는 의미는 값이 같은가를 비교하는 수식이 아니라 c 와 d 의 주소가 같은지를 비교하는 수식입니다.
반대로 primitive type 은 값의 비교를 하는 것이 맞습니다.
if(c == "test"){
System.out.println("c == \"test\"");
}else {
System.out.println("c != \"test\"");
}
이제 위의 결과 값이 어떻게 될지는 충분히 유추 가능하시겠죠?
c != "test"
네 위와 같이 다른 값이라는 결과 값을 리턴 합니다. ^^
▼ 도움이 되셨다면 로그인이 필요 없는 ▼
▼ 하트 클릭 한번 부탁 드립니다 ▼
감사합니다 :D
'Java' 카테고리의 다른 글
[ 자바 코딩 ] 오늘 날짜, 요일, 시간 구하기 (Calendar 클래스) (4) | 2018.01.03 |
---|---|
[ 자바 코딩 ] valueOf vs parseInt (9) | 2017.12.15 |
[ 자바 코딩 ] toLowerCase(), toUpperCase(), trim() (6) | 2017.11.24 |
[ 자바 코딩 ] Java startsWith(), endsWith() (7) | 2017.11.23 |
[ 자바 코딩 ] Java replace() vs replaceAll() (7) | 2017.11.20 |