我们都知道Java中final关键字的用法:
? ? ? ? 然而,被final修饰的变量不能被修改,这个怎么理解呢,是变量的值不能被修改,还是引用不能被修改呢,引用的对象可以被修改吗,我们来看代码:
class="java">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修饰的变量值,引用不能修改,但引用的对象可以被修改。