黑马程序员技术交流社区
标题:
final的问题
[打印本页]
作者:
城市儒侠
时间:
2013-12-19 19:27
标题:
final的问题
本帖最后由 城市儒侠 于 2013-12-19 20:46 编辑
public class Test {
public static void main(String[] args) {
Other o = new Other();
new Test().addOne(o);
System.out.println(o.i);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
复制代码
为什么结果是1呢?
命名被final修饰了啊。 应该不可以被更改才对啊。
作者:
Faner
时间:
2013-12-19 19:36
public void addOne(final Other o) // 这个 修饰的是 局部变量 只有调用该函数 的时候 这个final 修饰的作用才能起效果 那么在这个函数调用的期间 这个变量是不能修改的 当该函数调用完了 之后 这个变量就弹栈了 那么下次调用 的时候 这个变量又可以赋值其他的数值!~
作者:
张利星
时间:
2013-12-19 19:43
final修饰的是引用变量o,o中存储的是Other类对象的地址值.o被final修饰也就是说o这个变量的值不会变,但是o所指向的对象里的内容是可以改变的
作者:
Faner
时间:
2013-12-19 19:52
不好意思!回复错了! public void addOne(final Other o) {
o.i++; 这个应该是引用的问题! final Other o 这个修饰的是 引用地址是不能改变的! 但是里面的值是可以改变的!
作者:
绕世界流浪丶
时间:
2013-12-19 20:27
public class Test {
public static void main(String[] args) {
Other o = new Other();
new Test().addOne(o);
System.out.println(o.i);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
复制代码
你这个只是other o 被final修饰了
但是o的调用的值是不被修饰的
o.i++;
i的值是可以改变的
作者:
kun1990
时间:
2013-12-19 21:07
final修饰引用类型的时候,是地址不可以改变,但是变量的值是可以改变的。
作者:
青出于蓝
时间:
2013-12-20 11:57
final修饰的类表示表示该类不可被继承,修饰属性表示属性不可更改。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2