我们都知道Java中final关键字的用法:
- 被fiinal修饰的类不能被继承。
- 被final修饰的方法不能被重写。
- 被final修饰的变量不能被修改。
然而,被final修饰的变量不能被修改,这个怎么理解呢,是变量的值不能被修改,还是引用不能被修改呢,引用的对象可以被修改吗,我们来看代码:
package com.yuwl.jdk;
/**
* 测试内容:final修饰变量
* @author Yuwl
* 2018-3-18
*/
public class FinalTest {
private final int one = 1;
private final Value two = new Value(2);
private final int[] array = new int[]{1,2,3,4};
public static void main(String[] args) {
FinalTest ft = new FinalTest();
//ft.one = 2; //被final修饰的变量值不能更改,编译报错
Value v3 = new Value(3);
//ft.two = v3; //被final修饰的引用不能更改,编译报错
int n = ft.two.setValue(3); //被final修饰的引用不能更改,但引用的对象内容可以修改
int[] array2 = new int[]{1,2,3,4,5};
//array = array2; //被final修饰的数组引用不能更改,编译报错
ft.array[1] = 5; //被final修饰的数组引用不能更改,但引用的数组内容可以修改
}
}
class Value {
private int i;
public Value(int i) {
this.i = i;
}
public int setValue(int num) {
this.i = num;
return this.i;
}
}
通过以上代码测试,可以总结:被final修饰的变量值,引用不能修改,但引用的对象可以被修改。