黑马程序员技术交流社区

标题: 这个程序 用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的成员变量.

  1. <p>public class Something {
  2.     public static void main(String[] args) {
  3.         Other o = new Other();
  4.         new Something().addOne(o);
  5.         System.out.println(o.i);//输出为1
  6.     }
  7.     public void addOne(final Other o) {
  8.         o.i++;
  9.     }
  10. }
  11. class Other {
  12.     public int i=0;//给i赋值
  13. }</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修饰类时表示此类无法被继承,修饰方法时表示此方法无法被重写,楼主可以先了解这些知识点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2