@Override // 아래 궁금한 부분
public boolean equals(Object obj) {
if(this.num == ((INum)obj).num)
return true;
else
return false;
제가 알기로는 static 메소드는 인스턴스 생성없이 메소드 사용을 위하여 static 메소드로 정의하는 것으로 알고 있는데요. 답변에서 static 메소드는 static 변수 또는 지역 변수를 사용한다고 하셨는데, 죄송하게도 이 부분이 잘 이해가 안됩니다.
public static boolean equals(Object[] a, Object[] a2)
public static boolean equals(Object[] a, Object[] a2) {
if (a==a2)
return true;
if (a==null || a2==null)
return false;
int length = a.length;
if (a2.length != length)
return false;
for (int i=0; i<length; i++) {
if (!Objects.equals(a[i], a2[i]))
return false;
}
return true;
저 부분이 아래와 같이 되어 있는데요.
a,b 비교가 참조값 비교인지 아니면 저장된 값 비교인지 궁금합니다.
저장된값 비교하도록 오버라이딩된 부분이 없는데, 어떻게 저장된 값 비교를 하는지 알려주시면 감사하겠습니다.
늦은 시간까지 답변해주시는 점 다시 한번 감사드립니다.
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
답변자님,
정보를 공유해 주세요.
Objects.equals 메소드는 아래와 같이 되어있군요
여기는 Object a와 b를 비교하지만 결국은 참조값이 아닌 저장된 값 비교입니다.
왜냐면 Arrays클래스의 equals 메소드 안에서 !Objects.equals(a[i], a2[i]) 처럼 저장된 값을
매개변수로 던지기 때문이죠
그리고; 오버라이딩 되었다고 설명하셨는데... 오버라이딩의 기준은 아시겠죠?
Arrays.equals나 Objects.equals는 오버라이딩이 아닌 본인만의 메소드입니다.
equals 메소드를 오버라이딩 하려면 static이 아니어야 하고 매개변수를 1개만 가져야합니다.
이것도 걍 Object 클래스의 equals메소드를 사용하는 것뿐이죠
2019.04.25.
-
채택
질문자가 채택한 답변입니다.
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.