안녕하세요.
완전 초보입니다.
A 랑 B 랑 동일하냐는 if문을
if (A==B) 와 if (B.equals(A))
두가지 방법의 차이가 무엇인가요?
제가 == 로는 제대로 안되서 equals()로 하니까 되던데요...
== 사용할 때 주의점이 무엇인가요?
고수님들의 답변 부탁드립니다. 감사합니다.
모든 Object 형 인스턴스는 내부적으로 Hashcode 라는 유일성을 지닌 값을 가지고 있습니다
== 는 이 Hashcode 값을 비교하여 서로 다른 Object 가 같은 Hashcode 를 가진 변수인지 확인하는 것이고요
equals 는 기본 Object 에서는 Hashcode 를 비교하는 구문이지만
Override 를 통해서 다르게 내부적인 멤버변수가 같은지를 판단 할 수 있도록 바꿀 수 있습니다.
일례로 String 클래스로
String a = "aa";
String b = "aa";
boolean isEquals = (a == b )
이면 isEquals 는 False 입니다.
서로 다른 변수이기 때문에 Hashcode 가 다르지요
하지만 String 객체는 내부적으로 eaquals 함수는 문자가 같은지를 판단하도록 Override 가 되어 있습니다.
따라서
isEaquals = (a.equals(b));
하면 true 로 선언이 되는 것을 확인 할 수 있습니다.
== 의 주의점은
비교하려는 대상이 완벽히 같은 Object 를 가르키는 변수를 판단하는 함수에 쓰이는 지를 판단하셔야 합니다.
그것이 아니라면 equals 함수를 오버라이드 해서 사용하실 것을 권장해드리고
String 객체를 쓰시는 거라면 equals 를 쓸 것을 권장해드립니다.
마지막으로 Primitive 형은 == 를 쓸 것을 권해드립니다
(int, char, byte, float, short, long, double)
== 는 연산자로 두 대상의 동일성을 체크하는 것이고,
equals() 는 메소드로 대상의 equals 메소드를 통해 비교 검증하는 것 입니다.