使用final修饰后的变量不是应该不能够修改的吗?
class Demo
{
public static void main(String[] args)
{
final Student s = new Student();
s.setName("asw");
}
}
我为什么还能够通过Student的setName方法来修改Student的name属性?
class Demo
{
public static void main(String[] args)
{
final Student s = new Student();
s.setName("asw");
}
首先,final修饰过的是引用型的变量s,即s具体指向就是当前创建的这个对象,不能改变的是s指向的对象,而对象的属性还是可以改变的。如果要使对象的属性值定义成常量,则应该在对象所对应的类中的属性用final修饰。
final Student s = new Student();
是指:引用变量s的,内存地址不会在改变,也就是说s不会,从新指向一个新的Student对象或其子类。
s.setName("asw");
如果这句不能执行,需要对Student这个JavaBean内部的name属性修饰final,赋初始值,才可以这时就不可以在通过set方法赋值。