标题: 这个程序 用final修饰 变量 能行? [打印本页] 作者: ^o(孤8o|狼i¤F 时间: 2014-4-15 00:53 标题: 这个程序 用final修饰 变量 能行? public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
} 作者: 赵连明 时间: 2014-4-15 01:09
没问题.
因为在 addOne中.fina的是0.
而修改的是o的成员变量.
<p>public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
System.out.println(o.i);//输出为1
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i=0;//给i赋值
}</p>
复制代码
public class Something
{
public int addOne(final int x)
{
return ++x; //这样就是错误的,因为修改的是x,而x被final修饰了
}
}
作者: 清风夜独醉 时间: 2014-4-15 03:47
可以修饰
因为你o.i++改变的是i的值
而你final的是o这个对象。
如果你在addOne方法里把o=new Something().new Other()这样就不行了作者: Teemo_Mann 时间: 2014-4-15 08:21
可以的,final修饰对象的时候表示对象的引用不能改变,在上面例子中若是把o.i+改成
Other o2 = new Other();
o = o2;就错了,当final修饰变量时表示该变量无法改变,当final修饰类时表示此类无法被继承,修饰方法时表示此方法无法被重写,楼主可以先了解这些知识点