关于final,相信使用过Java的人都对它不陌生,而本文则将对它的功能和用法进行总结。
final关键字是一种变量前面的修饰符,代表着程序员的最终决策,final变量只能被赋值一次。
例如以下例子
final double a = 3.1;
a=3.1412;
final double b;
b=3.1;
b=3.1412;
以上两种方法都是错误的,因为对于double来说,final变量只能被赋值一次。同时对于基本的数值变量,比如int ,float , double, boolean ,其final一旦被确定则不可以进行任何修改。(如上面例子)
然而对于那些可变的(mutable)对象(object)变量,比如Data类,stringbuilder等,final只是固定了对其的引用,并不能保证其中的值不被修改。
如下例子:
final StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder1.append("I am so smart...");
System.out.print(stringBuilder1);
final StringBuilder stringBuilder1 = new StringBuilder();
StringBuilder stringBuilder2 =stringBuilder1;
stringBuilder2.append("I am so smart...");
System.out.print(stringBuilder1);
以上两种方法都是可行的,所以我们到底该怎么理解final呢?
笔者的理解是: 把final想象成一个固定的引用即可,对于基本变量类型,其被彻底固定,对于对象变量,我们仍可以使用其引用去修改它。