tra*_*veh 3 java immutability mutability effective-java
引用:
如果静态final字段具有可变引用类型,则如果引用的对象是不可变的,则它仍然可以是常量字段.
我不确定这是什么意思; 有人能给出一个例子吗?
一个例子是约什在谈论会List,这是一种可变类型(add(),remove(),等),但你可以指定一个不变的情况下它:
public static final List<String> NAMES = Collections.unmodifiableList( Arrays.asList("foo", "bar")); // immutable
Run Code Online (Sandbox Code Playgroud)
顺便说一句,一个看起来像常数但不是常量的东西的一个很好的例子是一个Date常数:
public static final Date EPOCH = new Date(0);
Run Code Online (Sandbox Code Playgroud)
但是一些代码可以做到这一点:
EPOCH.setTime(123456789); // oops!
Run Code Online (Sandbox Code Playgroud)
Date是可变的!每个人都会看到这样的变化.
与此类似String,这是不可变的:
public static final String NAME = "Agent Smith"; // immutable
Run Code Online (Sandbox Code Playgroud)