java final 参数 ,竟然也会被修改!
本人C++转过来 C++中把参数作为引用传进来常有,但为防止修改经常是fun(const int& i)
{}
java中
class abc
{
int i=0;
}
static void funParameter(final abc i)
{
i.i=999;
}
public static void main(String[] args)
{
abc a = new abc();
funParameter(a);
System.out.print(a.i);
}
i的值竟然被修改了,什么情况? --------------------编程问答-------------------- final abc i的参数类型是abc,可以修改abc的属性,但是不能再对i赋值
比如:
i.i=999;//ok
i = new abc()//The final local variable i cannot be assigned. It must be blank and not using a compound assignment
如果参数类型是int,下面的方易做图报错
static void funParameter(final int i) {
i = 999;//The final local variable i cannot be assigned. It must be blank and not using a compound assignment
}
--------------------编程问答-------------------- 这个final相当于cpp的常引用 --------------------编程问答-------------------- static void funParameter(final abc i)
{
i.i=999;
}
这final 修饰的是"abc",里面的123 是可以改变的,但是"abc"自身不能变
如果这么改i.i=999; -->abc = new abc(); 是不能通过编译的 --------------------编程问答-------------------- final是不可改引用地址,把最基本的语法看明白了就没这么多问题了。 --------------------编程问答-------------------- java也没有const method,也就是对类成员函数修饰,不允许修改类对象…… --------------------编程问答-------------------- 不允许修改对象引用,没说不允许修改对象属性。 --------------------编程问答-------------------- LZ试试 i = new abc();
就会出现预期的编译不通过的效果了。
或者abc中定义的i前加个final
补充:Java , Java相关