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