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

来源:5-1 不可变对象-1

李爽爽爽爽

2018-11-06

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


http://img.mukewang.com/szimg/5be18f1a00013f4007170459.jpg

http://img.mukewang.com/szimg/5be18f6e0001c78707650443.jpg

写回答

3回答

Jimin

2018-11-06

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

1
4
李爽爽爽爽
回复
Jimin
嗯嗯明白了谢谢老师
2018-11-08
共4条回复

Jimin

2018-11-06

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

0
0

Jimin

2018-11-06

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

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程