Arrays are 'deep' compared/hashCoded, which means that arrays that contain themselves will result in StackOverflowErrors. However,
this behaviour is no different from e.g. ArrayList.
You may safely presume that the hashCode implementation used will not change between versions of lombok, however this guarantee is not set in stone;
if there's a significant performance improvement to be gained from using an alternate hash algorithm, that will be substituted in a future version.
For the purposes of equality, 2 NaN (not a number) values for floats and doubles are considered equal, eventhough 'NaN == NaN' would
return false. This is analogous to java.lang.Double's equals method, and is in fact required to ensure that comparing an object
to an exact copy of itself returns true for equality.
If there is any method named either hashCode, equals or canEqual, regardless of
parameters or return type, no methods will be generated, and a warning is emitted instead. These 3 methods need to be in sync with
each other, which lombok cannot guarantee unless it generates all the methods, hence you always get a warning if one or more
of the methods already exist.
Attempting to exclude fields that don't exist or would have been excluded anyway (because they are static or transient) results in warnings on the named fields.
You therefore don't have to worry about typos.
Having both exclude and of generates a warning; the exclude parameter will be ignored in that case.
By default, any variables that start with a $ symbol are excluded automatically. You can only include them by using the 'of' parameter.
If a getter exists for a field to be included, it is called instead of using a direct field reference. This behaviour can be suppressed:
@EqualsAndHashCode(doNotUseGetters = true)