【Java小知识】final关键字的理解

面试的过程中,可能会被问到一些小问题,如:请说说你对final关键字的理解?从细节处经常能反应一个人的基础和对问题是否有刨根究底的精神。

final关键字的作用

众所周知:

  1. 被final修饰的类不可以被继承;
  2. 被final修饰的方法不可以被重写;
  3. 被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不可变的是变量的引用而非引用指向对象的内容。

发布了18 篇原创文章 · 获赞 38 · 访问量 693

猜你喜欢

转载自blog.csdn.net/wudingmei1023/article/details/103826492