Java равна для класса. == То же, что и .equals
Можно ли сделать ==
в переменной Class
вместо equals
и ожидать того же результата?
Например:
Class clazz = xyz;
Случай A:
if(clazz == Date.class) {
// do something
}
Случай B:
if(Date.class.equals(clazz)) {
// do something
}
Являются ли случаи А и случай Б функционально такими же?
Ответы
Ответ 1
Класс является окончательным, поэтому его equals() нельзя переопределить. Его метод equals() наследуется от Object, который читает
public boolean equals(Object obj) {
return (this == obj);
}
Итак, да, они одинаковы для класса или любого типа, который не отменяет equals(Object)
Чтобы ответить на ваш второй вопрос, каждый ClassLoader может загружать только один класс и всегда будет давать вам тот же класс для данного полностью квалифицированного имени.
Ответ 2
Да.
Взгляните на описание класса класса и обратите внимание, что он наследует equals
от Object
, для которого метод читает:
"Метод equals для класса Object реализует наиболее различающееся возможное отношение эквивалентности для объектов, то есть для любых ненулевых опорных значений x и y этот метод возвращает true тогда и только тогда, когда x и y относятся к одному и тому же объекту (x == y имеет значение true).
Ответ 3
Да, поскольку код для equals(...)
для класса следующий:
public boolean equals(Object obj) {
return (this == obj);
}