标题: 关于final的一点问题 [打印本页] 作者: 王桂丽 时间: 2012-8-30 16:03 标题: 关于final的一点问题 public class Something //定义一个公有类
{
public static void main(String[] args) {
Other o = new Other();//新建Other类的实例对象
new Something().addOne(o);//新建本类对象,并调用本类方法
}
public void addOne(final Other o) //定义本类方法,传递参数final Ohther o
{
o.i++;
}
}
class Other //定义一个Other类
{
public int i;//定义公有成员变量
}
疑问:1、Something类里方法addOne中所传递的参数,加final与不加有何区别,请举例说明。
2、调用new Something().addOne(o)后,这个类有何变化?怎样将结果打印?作者: yzhbxiang 时间: 2012-8-30 17:10
Other o被修饰成final,意味着o不能在addOne方法中被修改。比如:
public void addOne(final Other o)
{
o = new Other();
}
在上例中就是错误的。
但是上例中是o.i++,修改的是o的成员变量而不是o的reference。
反之,不加final的话就可以在addOne中对o本身的reference进行修改。
你可以加一些代码观察调用addOne方法后i值的打印结果。
public class Something //定义一个公有类
{
public static void main(String[] args) {
Other o = new Other();//新建Other类的实例对象
new Something().addOne(o);//新建本类对象,并调用本类方法
System.out.println(o.i);
}
public void addOne(final Other o) { //定义本类方法,传递参数final Ohther o