java final 参数 ,竟然也会被修改!

vuqrzk5w 2013-12-12 05:58:59
本人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的值竟然被修改了,什么情况?
...全文
1397 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oh_Maxy 版主 2013-12-13
  • 打赏
  • 举报
回复
LZ试试 i = new abc(); 就会出现预期的编译不通过的效果了。 或者abc中定义的i前加个final
ngzerone 2013-12-13
  • 打赏
  • 举报
回复
不允许修改对象引用,没说不允许修改对象属性。
vuqrzk5w 2013-12-13
  • 打赏
  • 举报
回复
java也没有const method,也就是对类成员函数修饰,不允许修改类对象……
forgetsam 2013-12-13
  • 打赏
  • 举报
回复
final是不可改引用地址,把最基本的语法看明白了就没这么多问题了。
时光清浅 2013-12-12
  • 打赏
  • 举报
回复
static void funParameter(final abc i)
{
i.i=999;
}

这final 修饰的是"abc",里面的123 是可以改变的,但是"abc"自身不能变

如果这么改i.i=999; -->abc = new abc(); 是不能通过编译的
WayneXuan 2013-12-12
  • 打赏
  • 举报
回复
这个final相当于cpp的常引用
Mourinho 2013-12-12
  • 打赏
  • 举报
回复
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
	}

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧