Что на самом деле делает метод Java Record Equals()?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Что на самом деле делает метод Java Record Equals()?

Сообщение Anonymous »

В моем Java-коде есть такой простой класс записи:

Код: Выделить всё

record SingleIndexProperties(A property) implements IndexProperties {

// Here go implementations of IndexProperties methods; not relevant to question.

}
Когда я запускаю тест JMH кода с использованием этой записи, я замечаю кое-что интересное в графике пламени времени ЦП, который генерируется в конце:
Изображение
Это всего лишь отрывок из гораздо более масштабного графика протестированного кода. Интересно то, что по какой-то причине метод записи по умолчанию равный(), кажется, выполняет некоторые динамические вызовы.
Наивно, я бы ожидал, что метод будет делать что-то вроде этого:

Код: Выделить всё

public boolean equals(Object o) {
if (o instanceof SingleIndexProperties other)  {
return Objects.equals(property, other.property);
}
return false;
}
Очевидно, что это не так. Что он на самом деле делает вместо этого и почему? Искал исходный код, но ничего не нашел.
(У меня OpenJDK Temurin-21.0.1+12. Пара вы видите, что в графе пламени это то, что помещается в запись, и оно само по себе является записью, чья функция Equals() демонстрирует такое же поведение по умолчанию. Затем внутри Pair есть Integerс.)

Подробнее здесь: https://stackoverflow.com/questions/775 ... r-the-hood
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»