Start here. This is the direct spoken answer to practice first.
Overview
Records remove boilerplate when a type is fundamentally defined by a fixed set of components, but they do not automatically make every component deeply immutable.
A record is a good fit when the type is a transparent carrier for a fixed set of values and its identity is defined by those components. Java provides component accessors, a canonical constructor, and component-based equals, hashCode, and toString. Record fields are final and the record class is final, but the immutability is shallow: a record component can still refer to a mutable list or array. A regular class is better when the type needs hidden representation, mutable identity, inheritance, or construction and behavior that do not map naturally to exposed components.