final修饰的变量,如果是一个对象时,对象中的值能被修改吗?

欣喜 Java每日一问 发布时间:2025-03-28 14:19:44 阅读数:3437 1
我们都知道被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}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202503/8413.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者