【Java小知识】final关键字的理解
程序员文章站
2024-01-09 23:51:52
...
面试的过程中,可能会被问到一些小问题,如:请说说你对final关键字的理解?从细节处经常能反应一个人的基础和对问题是否有刨根究底的精神。
final关键字的作用
众所周知:
- 被final修饰的类不可以被继承;
- 被final修饰的方法不可以被重写;
- 被final修饰的变量不可以被改变;
前2点都很容易理解,第3点呢?被final修饰的变量不可以被改变,究竟是变量的引用不能被改变,还是变量的值不能被改变呢??通过简单的demo来look一下
public class FinalTest {
private String s;
public FinalTest(String s) {
this.s = s;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public static void main(String[] args) {
final FinalTest finalTest = new FinalTest("hello");
finalTest.setS("world");
System.out.println(finalTest.getS());
}
}
运行结果,输出:world。再稍微修改下
public static void main(String[] args) {
final FinalTest finalTest = new FinalTest("hello");
final FinalTest finalTest1 = new FinalTest("world");
finalTest = finalTest1;
}
编译报错:Error: java: 无法为最终变量finalTest分配值
可以看出被final修饰不可改变的是变量的引用,而不是引用指向的内容,引用指向的内容是可变的。
同样数组和变量一样,都是引用不可变,引用指向的内容可变。
总结
final不可变的是变量的引用而非引用指向对象的内容。