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);
}
Другие вопросы по тегам