对于基本类型:
如 final int i=1;
final 的作用就是保证一个常量(编译期进行编译),一旦声明就不允许进行任何改变。而且在声明时就必须要确定它的值(或者按初始化置ZERO)。
对于对象类型:
如 final List i=new ArrayList()等等
final 的作用是保证 对象的引用不可改变( 此处的引用为i),也就是说,i 这个引用只能一次性的指向 new ArrayList()这个对象,一次性的定义后,不允许二次改变。(Once the reference is initialized to an object, it can never be changed to point to another object.)。然而这个对象本身可以改变!
比如 final List i=new ArrayList();
// ! i=new ArrayList(); 不允许改变引用
//! i=new LinkedList(); 不允许改变引用
//可以改变这个对象。
i.add(1);
i.remove(...);
所以,使用final首先要知道这两点。如果你一定要让一个对象类型的实例不可改变,可以通过别的方式来完成 。如List :
class ListReturn {
List list = new ArrayList();
private void doSomething() {
list.add("1");
list.add("2");
}
//返回的list不允许任何改变,也就是只有 1,2 这两个元素。
public List getList() {
doSomething();
return Collections.unmodifiableList(list);
}
}