书中第142页这样解释:
Java允许在参数列表中以声明的方式将参数指明为final。这意味着你 无法在方法中更改参数引用所指向的对象:
此处红色区域;到底是说不能改变这个引用?还是说不能改变引用所指向的对象?还是二者都不可修改?
上代码测试了下;
1.首先可以确定;引用是绝对不允许修改的
2.测试看看引用指向的对象能不能改
public class Test {
public static void main(String[] args)
{
Info info = new Test().new Info();
info.setI(10);
System.out.println(info);
withFinal(info);
System.out.println(info);
}
public static void withFinal(final Info info)
{
info.setI(12);//标记一
//info = new Info();//标记二
}
class Info
{
@Override
public String toString() {
return "Info:" + i;
}
private int i ;
public void setI(int i)
{
this.i = i;
}
}
}
输出:
Info:10
Info:12
可见。final参数引用所指向的对象是可以修改的。
另:
代码中 标记二 处 说明了 final 参数引用本身是不能修改的。编译时错误
ps->以前还真没注意这个细节。这么经典的书对这点的解释也不够精准。呵呵