Что на самом деле делает метод 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 с использованием этой записи, я замечаю кое-что интересное в графике пламени времени ЦП, который генерируется в конце:
Изображение

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

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

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

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

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

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

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

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

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