equals vs == operation to java, c#

프로그래밍 2011. 4. 14. 09:48
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
보통 숫자와 문자열을 비교할 때 ==이나 equals를 쓴다.
알고 있기로는 숫자를 비교할 때는 ==를 쓰고, 문자열을 비교할 때는 equals를 쓴다고 알고 있다.
그런데, 정확히 알고 있지 않아, 문자열을 비교할 때도 ==를 써서 동작할 때가 있고,
반대로 ==를 써서 같은 문자열이라도 틀린 것으로 간주되어 프로그램이 오동작하는 경험을 갖기도 한다.

요컨대, == 연산자는 객체(할당된 메모리주소)를 비교하고, equals는 값 자체를 비교하는 것이라고 정리하면 된다. 아래와 같이, java로 케이스별로 테스트를 해보았고, java, c#으로 테스트한 전체 소스는 첨부하도록 하겠다.

1. 숫자형 비교

int a = 10;
int b = 10;

if(a == b) TRUE

2. 문자형 비교

String a = "10";
String b = "10";

if(a == b) TRUE
if(a.equals(b)) TRUE

3. 다른 객체를 이용한 문자형 비교

String a = "10";
String b = new String("10");

// b변수의 경우 a와 같은 값을 가지고 있으나, 동적으로 생성했기에 메모리 주소가 다른 곳에 생성되었다.
if(a == b) FALSE
if(a.equals(b)) TRUE

new를 통해 생성된 문자열 뿐만 아니라, 기타 다른 함수들로 인해 문자열을 가공한 후 다른 객체로 반환하는 함수들이 많기 때문에 위의 예처럼 문자열을 항상 == 연산자로 비교한다는 것은 잠재적인 문제점을 안고 있다.

위에서 제시한 명제처럼 "숫자를 비교할 때는 ==를 쓰고, 문자열을 비교할 때는 equals를 쓴다"로 사용하되, 그 이유를 제대로 알고 있는 것이 중요하다 하겠다.

StringCompare.java
StringCompare.cs

추가) 2011.04.18

a.equals(b)와 같이 equals()로 비교하는 구분은 a가 NULL인지 먼저 확인해야 한다.
그렇지 않으면 NullPointException이 발생하게 된다.

또한, equals와 == operation 중에 equals의 수행속도가 조금 더 빠르다고 한다.

'프로그래밍' 카테고리의 다른 글

User Agent 정리  (0) 2011.07.11
한국의 프로그래머 분포  (0) 2011.07.08
netstat  (0) 2011.03.24
DHCP Relay Agent - How Relay Agent Work  (0) 2011.02.18
배치파일로 대량 부하 테스트  (0) 2010.11.23
posted by 어린왕자악꿍