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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
没问题.
因为在 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修饰了
}
}


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
可以修饰
因为你o.i++改变的是i的值
而你final的是o这个对象。
如果你在addOne方法里把o=new Something().new Other()这样就不行了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
Teemo_Mann 来自手机 中级黑马 2014-4-15 08:21:36
板凳
可以的,final修饰对象的时候表示对象的引用不能改变,在上面例子中若是把o.i+改成
Other o2 = new Other();
o = o2;就错了,当final修饰变量时表示该变量无法改变,当final修饰类时表示此类无法被继承,修饰方法时表示此方法无法被重写,楼主可以先了解这些知识点

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马