List 声明为final,那么这个list 可以用执行add()方法吗? 在线等哈~~

2025-01-02 03:53:04
推荐回答(3个)
回答1:

list,StringBuffer 可以,但是不能修改引用,也就不能再次赋值
其它的不行.

因为 list,StringBuffer 中实际存储数据的元素不是final的

回答2:

final static List list=new ArrayList();
list 声明为final 是可以用add()方法的,final这里表示该变量的地址是不能改变的 如果你重新list=new ArrayList(); 这样就会报错!

而 final int ..........后面的说明他们一旦初始化了值就不能改变!!!
final StringBuffer 同final List一样

回答3:

final这个修饰符代表着不可改变,不过在不同的地方代表着不同的意义

在类上面
public final class Foo{}
代表着Foo这个类不可被继承

在方法上面,代表着这个方法不能被重写
public class Foo{
public final void get(){}
}
public class Fool extends Foo{
//这里不能重写父类的get()该方法
}

在字段上面,代表着这个字段不能被重新赋值,但请注意
public class Foo{
public final int i;//这里i没有赋值
public Foo(int i){
this.i = i;//那么在构造函数里则可以被首次赋值,其它该方法里绝对不行
}
}

public class Foo{
public final int i = 0;//这里i被赋值
public Foo(int i){
//那么不管是在构造函数里,还是在任何其它地方,都不能被重新赋值
}
}

记住,用在字段前,只是它不能被重新赋值,不代表它不能改变本身的值。

比如你的说的final List list = new ArrayList();这个list的任何行为(即方法)都是允许调用的。