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}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


