黑马程序员技术交流社区
标题:
关于final的问题
[打印本页]
作者:
381946250
时间:
2013-5-28 17:37
标题:
关于final的问题
本帖最后由 381946250 于 2013-5-29 11:49 编辑
在定义方法的参数时,使用如下形式
public void method(final StringBuffer param)
{
}
想阻止方法内部修改传进来的参数对象,
为什么不可以?
final修饰一个变量时,到底是引用不能变,还是引用的对象不能变?
作者:
FantasticPie
时间:
2013-5-28 17:48
本帖最后由 FantasticPie 于 2013-5-28 17:50 编辑
就对于这个题目而言,外部传进这个方法的只要是StringBuffer的对象都是可以的,比如传入一个new StringBuffer("a"),或者传入一个new StringBuffer("b"),这都是可以的。关键是在method的方法内的param是不能改变的,比如在方法内定义 param = new StringBuffer(),就是不允许的。
作者:
顾玲玉
时间:
2013-5-28 18:18
对于引用类型的变量而言,它保存的仅仅是一个引用,final只保证这个引用所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以改变,
public class TestFinal
{
public static void main(String[] args)
{
final int[] iArr = {5,6,12,9};
System.out.println(Arrays.toString(iArr));
iArr[2] = 4; //这个语句是合法的,对数组元素重新赋值
System.out.println(Arrays.toString(iArr));
iArr = null; //这个语句是不合法的,因为其对iArr重新赋值
}
}
由此可以看出,使用final修饰的引用类型变量不能被重新赋值,但可以改变引用类型变量所引用对象的内容。
作者:
紫衣侯
时间:
2013-5-28 18:26
final只能保证引用永远指向固定对象,不能保证那个对象的状态不变
作者:
381946250
时间:
2013-5-29 11:49
这个关键字的用法太让人纠结啦,谢谢大家的回答,明白了!我再敲一敲!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2