(getClass ()! = obj.getClass ()) для объекта obj - PullRequest
0 голосов
/ 27 марта 2019

Blockquote

 public boolean equals(Object obj) {
if (this == obj) {
    return true;
}
if (obj == null) {
    return false;
}
if (getClass() != obj.getClass()) {
    return false;
}
final Person other = (Person) obj;
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
    return false;
}
if ((this.email == null) ? (other.email != null) : !this.email.equals(other.email)) {
    return false;
}
if (this.age != other.age && (this.age == null || !this.age.equals(other.age))) {
    return false;
}
return true;
}

У меня есть вопрос об этом коде из этого обсуждения.

Есть эта строка:

    final Person other = (Person) obj;

после этого условного утверждения:

    if (getClass() != obj.getClass()) {
    return false;
}

Если getClass() возвращает класс, отличный от Object, например, наиболее вероятный Person в этом случае, тогда он не вернет false, а остальная часть кода после условного оператора не будет реализованы?

1 Ответ

2 голосов
/ 27 марта 2019

obj.getClass() вернет класс времени выполнения объекта, то есть он проверит во время выполнения, на что указывает ссылка Object.

Это упоминается в Java doc метода getClass():

Возвращает класс времени выполнения этого объекта

В качестве простого теста вы можете убедиться, что getClass проверяет тип объекта во время выполнения:

public static void main(String[] args) {
    String s = "hello";
    test(s);
}
public static void test(Object o){
    System.out.println(o.getClass());
}

Здесь вывод будет относиться к классу String, хотя ссылочный тип во время компиляции - Object:

class java.lang.String

Таким образом, в вашем методе false не будет возвращено, если экземпляр Person передан методу equals. Но если это не экземпляр Person, тогда getClass() != obj.getClass() будет true и equals выйдет с false в качестве возвращаемого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...