请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

final 修饰的变量作为参数,是可以修改的

老师您好,如下两幅图,test3中,参数为a,用final修饰的时候,a不可改动,但是方法的参数中如果没有final的话,就可以改动,请问这个是为什么?


https://img1.sycdn.imooc.com//szimg/5be18f1a00013f4007170459.jpg

https://img1.sycdn.imooc.com//szimg/5be18f6e0001c78707650443.jpg

正在回答

3回答

Jimin 2018-11-06 22:11:18

这个问题是这样的,Integer变量传入一个函数使用int接收时,其实过程中是有变量拷贝过程的,函数里int变量本质上和Integer对象就只是值相同而已,相当于重新声明一个int变量,给的值等于Integer对象的值,因此添加final是否可以修改只与这个函数定义有关,而和外面的Integer对象无关,之后就是final这个关键字的作用了。这个也可以通过这两个变量的作用域来看一下,函数声明里的int变量只在函数内。

1 回复 有任何疑惑可以回复我~
  • 提问者 李爽爽爽爽 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-11-07 20:50:37
  • 提问者 李爽爽爽爽 #2
    谢谢老师,这里弄明白了~
    我后面又改了一下,如第二幅图,把test3改成test3(Integer a),依旧是可以修改的,请问这个是为什么?
    回复 有任何疑惑可以回复我~ 2018-11-07 20:52:17
  • Jimin 回复 提问者 李爽爽爽爽 #3
    看作用域啊,你修改的a是参数a,而不再是Integer a,你上面Integer a改成其他名称也不影响这个函数
    回复 有任何疑惑可以回复我~ 2018-11-07 22:37:24
Jimin 2018-11-06 22:04:35

我上面回答偏了,我重新回答一下

0 回复 有任何疑惑可以回复我~
Jimin 2018-11-06 22:02:39

你好,final是java关键字,你学习它时应该任何资料都提到过,使用final修饰的引用不允许被修改的,这个是由jvm来保证的,就和synchronized关键字很像,也可以当作java的语法去理解,因此不按照这个规则去使用,编译就会出错。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信