META-INF.modules.java.base.classes.java.lang.doc-files.ValueBased.html Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java.base Show documentation
Show all versions of java.base Show documentation
Bytecoder java.base Module
Value-based Classes
Value-based Classes
Some classes, such as java.util.Optional
and
java.time.LocalDateTime
, are value-based. Instances of a
value-based class:
- are final and immutable (though may contain references to mutable
objects);
- have implementations of
equals
,
hashCode
, and toString
which are computed
solely from the instance's state and not from its identity or the state
of any other object or variable;
- make no use of identity-sensitive operations such as reference
equality (
==
) between instances, identity hash code of
instances, or synchronization on an instances's intrinsic lock;
- are considered equal solely based on
equals()
, not
based on reference equality (==
);
- do not have accessible constructors, but are instead instantiated
through factory methods which make no committment as to the identity
of returned instances;
- are freely substitutable when equal, meaning that interchanging
any two instances
x
and y
that are equal
according to equals()
in any computation or method
invocation should produce no visible change in behavior.
A program may produce unpredictable results if it attempts to distinguish two
references to equal values of a value-based class, whether directly via reference
equality or indirectly via an appeal to synchronization, identity hashing,
serialization, or any other identity-sensitive mechanism. Use of such
identity-sensitive operations on instances of value-based classes may have
unpredictable effects and should be avoided.
© 2015 - 2025 Weber Informatics LLC | Privacy Policy