Just because the reference to the list is immutable doesn't mean that the list it refers to is immutable.
Even if list
was made final
this would be allowed
// changing the object which list refers to
example.getList().add("stuff");
but this would not allowed:
// changing list
example.list = new ArrayList<String>(); // assuming list is public
String data structure | List data structure
.-------------------------+------------------------------------.
Immutable | String | Collection.unmodifiableList(...) |
-----------+-------------------------+------------------------------------|
Mutable | StringBuffer | ArrayList |
'-------------------------+------------------------------------'