final修饰的变量可以被改变了?高手来看看
先看代码
class People {
int i;
People(int ii) {
i = ii;
System.out.println(i);
}
}
public class FinalTest {
private final int i = 1;
private final int j;
private final People p;
public FinalTest() {
j = 2; //问题在这,被final修饰的变量不是常量吗?不是不能改变吗?
p = new People(3);
System.out.println(j);
}
public FinalTest(int x) {
j = x;
p = new People(x);
System.out.println(j);
}
public static void main(String[] args) {
FinalTest ft = new FinalTest();
FinalTest ft1 = new FinalTest(4);
}
}
在这个代码中,不管是被final修饰的基本数据类型还是引用似乎都可以改变,高手来解释!
此程序可以编译通过,并能正确运行。