当前位置:编程学习 > JAVA >>

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相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,