final修饰的变量,如果是一个对象时,对象中的值能被修改吗?
我们都知道被final修改的变量,不可以修改其值,那么被final修饰的对象,其值是否可以被修改呢?下文笔者将一一道来,如下所示
final修饰变量的本质
-`final`修饰的基本类型变量: 变量的值一旦赋值后就不能再改变。 -`final`修饰的对象引用: 引用本身不能指向其他对象 但对象的内部状态(字段)可以被修改。例
1.`final`修饰的基本类型变量
当`final`修饰一个基本类型变量时 该变量的值是不可变的。
public class FinalPrimitiveExample { public static void main(String[] args) { final int number = 10; // number = 20; // 编译错误: cannot assign a value to final variable number System.out.println("Number: " + number); } }
2.`final`修饰对象引用
当`final`修饰一个对象引用时 引用本身不能指向其他对象 但对象的内部状态(字段)可以被修改
public class FinalObjectExample { public static void main(String[] args) { final Person person = new Person("Alice", 30); System.out.println("Before modification: " + person); // 可以修改对象的字段 person.setName("Bob"); person.setAge(35); System.out.println("After modification: " + person); // 不能让 person 引用指向其他对象 // person = new Person("Charlie", 40); // 编译错误: cannot assign a value to final variable person } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } ====运行以上代码,将输出以下信息======= Before modification: Person{name='Alice', age=30} After modification: Person{name='Bob', age=35}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。