A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 381946250 中级黑马   /  2013-5-28 17:37  /  1327 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 381946250 于 2013-5-29 11:49 编辑

在定义方法的参数时,使用如下形式


public void method(final  StringBuffer  param)
{

}

想阻止方法内部修改传进来的参数对象,
为什么不可以?


final修饰一个变量时,到底是引用不能变,还是引用的对象不能变?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
本帖最后由 FantasticPie 于 2013-5-28 17:50 编辑

就对于这个题目而言,外部传进这个方法的只要是StringBuffer的对象都是可以的,比如传入一个new StringBuffer("a"),或者传入一个new StringBuffer("b"),这都是可以的。关键是在method的方法内的param是不能改变的,比如在方法内定义 param = new StringBuffer(),就是不允许的。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
对于引用类型的变量而言,它保存的仅仅是一个引用,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修饰的引用类型变量不能被重新赋值,但可以改变引用类型变量所引用对象的内容。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
final只能保证引用永远指向固定对象,不能保证那个对象的状态不变
回复 使用道具 举报
这个关键字的用法太让人纠结啦,谢谢大家的回答,明白了!我再敲一敲!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马