Start here. This is the direct spoken answer to practice first.
Overview
The operators answer different questions: whether references identify the same object and whether objects represent the same value.
For primitives, == compares primitive values. For object references, == checks whether both references point to the same object, including whether both are null. equals asks for logical equality as defined by the object's type. Strings, records, wrapper values, and many domain value objects are normally compared with equals. If a class does not override Object.equals, its default behavior is identity equality, so the type's contract determines what equals means.