Java 基础 · 单选题 · 第 3 题
Java 后端开发面试 · 第 3 题
用 final 修饰一个引用类型的局部变量后,下列说法正确的是?
- A该变量指向的对象从此变为不可变对象,任何字段都不能再修改
- B该变量会被放进方法区的常量池,所有线程共享同一份拷贝
- C该变量允许被重新赋值一次,第二次赋值时才会编译报错
- D该变量不能再指向别的对象,但对象内部的状态仍然可以修改
答案
D D. 该变量不能再指向别的对象,但对象内部的状态仍然可以修改
解析
final 限制的是变量本身只能赋值一次,对引用类型来说就是「指向不能变」,对象内容不受影响。例如 final List 仍然可以 add 元素。真正的不可变对象要靠类的设计来保证:字段私有且 final、不提供修改方法、防御性拷贝,比如 String 和 record。