谈谈对final的理解

    1、final修饰类

      类不能被继承,类中的所有方法都是final的

    2、final修饰方法

      方法不能被覆盖,private修饰的方法隐性的添加了final

    3、final修饰方法内参数

      方法内的参数不会被改变,但如果是类或者引用其值可以被改变   

  public static void main(String[] args){
        StringFinal stringFinal = new StringFinal();
        StringBuffer buffer = new StringBuffer("hello");
        StringFinal.changeValue(buffer);
        System.out.println(buffer);
    }
    public static void changeValue(final StringBuffer buffer){
        //final修饰引用类型的参数,不能再让其指向其他对象,但是对其所指向的内容是可以更改的。
        //buffer = new StringBuffer("hi"); //error
        buffer.append("world");
    }

     输出“helloworld”

    4、final修饰变量

      final修饰变量,变量一旦被赋值,就不可被改变。如果变量被赋值为简单数值时,是可以被编译器当成常量调用。

        

public static void main(String[] args) {
        String a = "hello2";
        final String b = "hello";
        String d = "hello";
        String c = b + 2;
        String e = d + 2;
        System.out.println((a == c));//true
        System.out.println((a == e));//false    String e = d + 2 相当于  String e = new String(d + 2)
}

  

      如果变量被方法赋值时,也就是说被其他引用赋值时,所以,只能运行时被赋值 

public class Test { 
    public static void main(String[] args)  { 
        String a = "hello2";   
        final String b = getHello(); 
        String c = b + 2;   
        System.out.println((a == c)); //false   此时的  String c = b + 2;相当于 String c = new String(b + 2)
} public static String getHello() { return "hello"; } }

  

    总结,在Java里,本质是值传递,所以被final修饰后基本数据变量的值是不变的,final类所指向的引用时不会变的。

参考:https://www.cnblogs.com/xiaoxi/p/6392154.html;

原文地址:https://www.cnblogs.com/nicknailo/p/8796452.html