'programming/Java'에 해당되는 글 1건
문자열(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"가 출력된다.
이에 대한 포스팅은 다음에..