欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-09 23:51:52
...

面试的过程中,可能会被问到一些小问题,如:请说说你对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不可变的是变量的引用而非引用指向对象的内容。

相关标签: Java小知识 java