final修饰变量

 final修饰基本类型变量

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变

 final修饰引用类型变量

当使用final修饰引用类型变量时,它保存的仅仅是一个引用,final只能保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以改变

package com.j1803.finalTest;
import java.util.Arrays;
public class FinalReferenceTest {

 public static void main(String[] args) {
  //final修饰数组变量,iArr是一个引用变量
  final int [] iArr={5,6,12,9};
  System.out.println(Arrays.toString(iArr));
  //对数组元素进行排序,合法
  Arrays.sort(iArr);
  System.out.println(Arrays.toString(iArr));
        //对数组iArr重新赋值,合法
  iArr[2]=-100;
  //下面语句对iArr重新赋值,非法
  //iArr=null;
       //final修饰一个Person变量,p是一个引用变量
  final Person p=new Person(22);
  //改变Person对象p的实例变量,合法
  p.setAge(45);
  System.out.println(p.getAge());
  //非法
  //p=null;
 }

}
class Person{
 private int age;

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public Person(int age) {
  super();
  this.age = age;
 }
 
}

相关推荐:

如何在 Python 模块中安全使用主程序的循环变量

python模块具有独立作用域,无法直接访问导入它的主程序中的变量(如循环计数器i);正确做法是通过函数参数显式传递值,而非重复import。 python模块具有独立作用域,无法直接访问导入它的主程序中的变量(如循环计数器i);正确做法是通过函数参数显式传递值,而非重复import。 在Pytho...

如何在Python中通过解包赋值优化变量交换与赋值的执行速度?

Python解包赋值不提升执行速度,其核心价值在于增强可读性、安全性和语义清晰度;它通过结构断言避免手动索引错误,适用于多值返回、可变长解包及字典传参等场景。 Python中的解包赋值本身不会提升变量交换或赋值的“执行速度”,它和传统赋值在底层开销几乎一致;真正带来收益的是代码可读性、安全性与表达意...

Python 中 nonlocal 变量在递归中未按预期更新的根本原因解析

本文深入剖析递归函数中nonlocal变量更新失效的典型陷阱:当res+=recurse(i+1)(即右值直接参与赋值)时,res仅被最后一步覆盖为首个返回值;而正确写法需确保res的读取发生在递归“回溯”阶段,即其值已被深层调用更新之后。 本文深入剖析递归函数中`nonlocal`变量更新失效的典...

Python 中 nonlocal 变量在递归中未按预期更新的原因解析

本文深入剖析递归函数中使用nonlocal变量时,因赋值表达式求值顺序不同(l-valuevsr-value位置)导致结果异常的根本原因,并通过对比代码揭示执行时序与变量读写时机的关键影响。 本文深入剖析递归函数中使用nonlocal变量时,因赋值表达式求值顺序不同(l-valuevsr-value...

如何将全局变量安全重构为局部状态变量

本文介绍在Pandasapply()场景下,如何消除global语句依赖,通过可变容器(如字典)或面向对象方式封装跨行计算所需的状态变量,提升代码可测试性、可重入性与线程安全性。 本文介绍在pandas`apply()`场景下,如何消除`global`语句依赖,通过可变容器(如字典)或面向对象方式封...