A field of immutable type that is not declared final, but is assigned to only in a constructor or static initializer of its declaring type, may lead to defects and makes code less readable. This is because other parts of the code may be based on the assumption that the field has a constant value, and a later modification, which includes an assignment to the field, may invalidate this assumption.

If a field of immutable type is assigned to only during class or instance initialization, you should usually declare it final. This forces the compiler to verify that the field value cannot be changed subsequently, which can help to avoid defects and increase code readability.

  • Java Language Specification: 4.12.4 final Variables, 8.3.1.2 final Fields.