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);
}