'전체 글'에 해당되는 글 54건

programming/Java

문자열(String) 객체에 대한 비교연산 #equals? #==?

두 객체가 같은지 비교하고 싶다.


String A = "aaa";

String B = "aaa";


위의 두 A, B 객체는 같다고 할 수 있을까?


상등연산자 '=='로 참조자료형을 비교하려고 사용하면 그 주소값이 같은지 확인한다.

그렇다면 A와 B 모두 상수형 문자열 "aaa"를 가리키기 때문에 같은 주소값을 같는 객체로 true가 나와야한다.


System.out.println(A==B);


컴파일하여 실행해보면 콘솔창에 "true"가 출력되는 것을 볼 수 있다.


String A = "aaa";

String B = new String("aaa");


위의 경우에는 어떨까?

결과는 "false"가 출력된다.

왜냐하면 두 객체의 '값'은 같을지라도 A가 가리키는 "aaa"와, B가 가리키는 "aaa"는 같은 메모리 주소에 위치하지 않고 각각 다른 장소에 저장되어있다. 그렇기에 '=='를 사용하면 "false"를 반환한다.


하지만 현실세계에서 "aaa"와 "aaa"는 같다. 그렇기에 당연히 프로그램에서도 동일한 객체로 인식하게끔 프로그래밍하고 싶을 것이다.



equals() :: 객체가 같은지 비교하는 메소드


모든 클래스에서는 아래와 같은 메소드를 사용할 수 있다.


public boolean equals(Object obj)


위의 메소드는 현재 객체와 매개 변수로 넘겨받은 객체가 같은지 확인한다. 같으면 true를, 다르면 false를 리턴한다.


따로 내가 저런 메소드를 생성하지 않았는데 어떻게 사용할 수 있을까?

왜냐하면 보이지 않지만 자바의 모든 클래스는 java.lang.object 클래스를 상속하고있다.

object 클래스에 관해서는 더 자세히 포스팅하겠다. 구글에서 검색하면 아주 좋은 설명들이 많다.


String A = "aaa";

String B = new String("aaa");


System.out.println(A.equals(B));


위와 같은 코드를 실행하면 정상적으로 "true"가 출력된다.


하지만 일반적으로 String을 제외한 객체들의 경우 위와 같은 코드로는 "false"가 출력된다.

이에 대한 포스팅은 다음에..





 [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ]  [ ··· ]  [ 54 ] 

푸터바

태그

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today :
  • Yesterday :
  • Total :