class Dog{
String name;
public Dog{
this.name=name;
}
}
class Test{
public static void main(String[] args){
final Dog dog=new Dog("欧欧");
dog.name=""美美;
dog=new Dog("亚亚");
}
}
我知道dog.name=""美美;是正确的, dog=new Dog("亚亚");是错误的
但是不明白真正的原因,关于对象的引用值和对象的属性值不懂,求大神讲解
final
------解决方案--------------------
final Dog vdog = new Dog("XX");
执行new操作的时候JVM会分配一块内存,用来保存新创建的实例,实例对应的属性值都保存在这块内在中。
给vdog赋值的时候,实际上vdog保存的是这块内存的地址。
final限制的是vdog的值只能是这个内存的地址,不能修改成其他地址,所以再次执行vdog=new Dog("YY")的时候会报错。
final不限制对内存中数据的修改,所以vdog.name="YYY"是可以运行的。