Відповідь (як завжди): " Це залежить. " Це залежить від
вашого класу.
Наприклад, якщо ви вважаєте
class X {
T a, b;
X(T _a, _b) { a = _a; b = _b }
}
не використовувати симетричний оператор типу +
,
*
або ^
(уявіть T
int
, і ви хешируете X (1,2)
і X
(2,1)
. Очевидно, що хеш-код повинен бути іншим. три
"рішення" (xor хеш-значення) були б поганими).
Якщо T
є складним типом, третє рішення (
Objects.hash()
) також може бути поганим, оскільки
розглядаються лише посилання (рівні об'єкти можуть повертати різні
хеші) коди).