java关键字之final

   

 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。final修饰变量较为常用。

当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值。

【修饰变量】:
     final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
【修饰方法】:
     final方法不能被子类方法覆盖,但可以被继承。
【修饰类】:
     final类不能被继承,没有子类,final类中所有方法都是final的。(如String类)


那么final变量和普通变量到底有何区别呢?下面请看一个例子:

public class Test {
    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));
        System.out.println((a == e));
    }
}

运行结果:

ture
false

当final修饰基本数据类型或String时,如果在编译期间能够知道变量的确切值,那么编译器会把它当作编译期常量(即相当于在任何使用final变量的地方直接使用常量),不用等到运行时确定。所以变量c在便宜期间相当于"hello2"。而变量d要等到运行时通过链接确定值。不过要注意,只有在编译期间能确切知道final变量值的情况下,编译器才会进行这样的优化。

参考:http://www.cnblogs.com/hwaggLee/p/4491474.htm

原文地址:https://www.cnblogs.com/liweizai/p/6536191.html