使用final修饰的变量是引用不能变,还是引用的对象不能变?

221 阅读1分钟

分析&回答

是引用不能变,即对象的指向不能变,但引用的对象即引用里的值是可以变得,因为它又没有用final修饰。

基本数据类型的值是不能更改的
比如:final int a=1;a=2;
那肯定编译也过不了,因为a是final修饰的不可改变;a原来指向1,后来指向2a的指向变了。

引用类型的值是能更改的
比如:final int[] arr= {1,2,3}; arr[0]=2;
这种是可以的。因为arr的指向并没有变 只不过它里边的值可以变。

反思&扩展

final 修饰的变量什么时候赋值?

  • final 修饰成员变量是在实例初始化的时候被赋值的。
  • final static int a = 1; //准备阶段赋值
  • final static Object c = new Object(); //初始化阶阶段赋值

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!