黑马程序员技术交流社区
标题:
关于final(问题已解决,谢谢各位)
[打印本页]
作者:
戎石锁
时间:
2012-8-20 21:48
标题:
关于final(问题已解决,谢谢各位)
本帖最后由 戎石锁 于 2012-8-21 22:22 编辑
在定义方法的参数时,使用如下形式
public void method(final StringBuffer param)
{
}
想阻止方法内部修改传进来的参数对象,
为什么不可以?
final修饰一个变量时,到底是引用不能变,还是引用的对象不能变?
作者:
杨震
时间:
2012-8-20 21:53
是引用不能变,不是引用所指的对象,所以你那个传参是不行的,因为传参传的是对象的引用,是引用赋值,引用参数必然变了,我是这样想的,没像你那样做过,C++里面可以阻止方法内部修改传进来的参数对象
作者:
陈鑫
时间:
2012-8-20 22:08
本帖最后由 陈鑫 于 2012-8-20 23:34 编辑
public void method(final StringBuffer param)
{
}
这种方式没有问题啊,当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
final修饰的变量是不可变的,即不可被重新赋值
而其变量引用的对象中的数据是可变的
public class TestFinal {
final Exam exam = new Exam();
public static void main(String[] args) {
TestFinal t = new TestFinal();
//final修饰的变量是不可变的,即不可被重新赋值
//而其变量引用的对象中的数据是可变的,下面就成功对对象exam中的a属性重新赋值
t.exam.setA("a");
System.out.println(t.exam.getA());
//下面注释起来的这句就报错,因为被final修饰的变量不可被重新赋值
//t.exam = new Exam();
}
}
class Exam{
private String a;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2