I know the usual reasons that apply to general immutable classes, viz
However, wrapper classes represent primitive types, and primitive types are mutable. So why aren't wrapper classes mutable?
However, wrapper classes represent primitive types, and primitive types (except String) are mutable.
Firstly, String isn't a primitive type.
Secondly, it makes no sense to talk about the primitive types being mutable. If you change the value of a variable like this:
int x = 5;
x = 6;
That's not changing the number 5 - it's changing the value of x
.
While the wrapper types could have been made mutable, it would have been annoying to do so, in my view. I frequently use readonly collections of these types, and wouldn't want them to be changeable. Very occasionally I want a mutable equivalent, but in that case it's easy enough to come up with one, or use the Atomic*
classes.
I find myself wishing that Date
and Calendar
were immutable far more often than I find myself wanting Integer
to be mutable... (Of course I normally reach for Joda Time instead, but one of the benefits of Joda Time is immutability.)