当前位置: 代码迷 >> J2SE >> 为什么定义为final的类还可以修改引用而指向同类其他对象的引用
  详细解决方案

为什么定义为final的类还可以修改引用而指向同类其他对象的引用

热度:60   发布时间:2016-04-23 20:06:35.0
为何定义为final的类还可以修改引用而指向同类其他对象的引用?


public class Test2 {

public static void main(String[] args) {
FinalPerson fp = new FinalPerson();
int age = fp.getAge();
System.out.println(age);
//得到被修饰的fp2
FirstPerson fp2 = fp.getFp();
fp2 = new FirstPerson();
System.out.println(fp2.getAge());
System.out.println("fp2"+fp2);//输出对象内存引用
//这里new一个新对象fp3
FirstPerson fp3 = new FirstPerson();
fp3.setAge(66);
              //将fp3的引用赋给fp2
fp2 = fp3;
System.out.println("fp2"+fp2);//输出对象引用,这里的fp2地址已经改变了,为什么呢??
}

}

class FinalPerson{
private final int age = 5;
       // 将fp修饰为final
private final FirstPerson fp=null;

public int getAge() {
return age;
}

public FirstPerson getFp() {
return fp;
}
}
class FirstPerson{
private int age = 5;

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}


为何final的fp2可以被赋值fp3的引用呢??
------解决思路----------------------
注意fp2变量并未添加final关键字,你所谓的常量是对于FinalPerson.fp来说他是不可改变的.
------解决思路----------------------
FirstPerson fp2 = fp.getFp(); 这句相当于fp2=null,所以final对其限制
  相关解决方案