I knew Integer is immutable in Java.
But why it is designed such a way ?.
i did went through the answers .
Is Integer Immutable
i++ still working for immutable Integer in Java?
Why are Java wrapper classes immutable?
but i couldn't find the use case which is mandate the Integer as immutable
Is there any technical reasons like for String
possibility to cache.
Others are reducing global state
You won't find a mandatory reason why
java.lang wrappers must be
immutable. Simply because its a design decision, they could have decided otherwise. The language designers had to chose between
immutable. And they chose
immutable. Thats it.
There are some
compelling (IMO) reasons though to make them
Its consistent with
String, the same reasoning you provided for
String to be
immutable apply to
Integer etc. as well (e.g. think of a port number in a property map). This generally applies to any mutable type.
Immutable types rule out a plethora of hard to find mistakes one can make where one involuntarily changed an objects member value by modifying the value obtained through a
getter. It saves a lot of defensive copying when the type is
immutable. The most infamous example is
java.util.Date, which is generally a pain to use because its
mutable (API issues aside).
Also immutable types allow for the use of shared instances, like e.g.
Integer does for commonly used values (see Integer.valueOf(int)).