안녕하세요. 제임스 입니다. 


이번에는 자바에서 문자열 비교방법에 대해 알아보고 차이점에 대해서도 알아 보겠습니다. 



■ 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

블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,