首页 > 代码库 > final引发的结果

final引发的结果

请看下面一道有关final修饰的作业题,此外我又画了一张内存分析图,若是有什么问题不要骂我,毕竟我还只是小虾米而已。

public class Test {
    public static void main(String[] args) {   
        final Person person = new Person("欧欧");
        person.name = "美美";
        person = new Person("亚亚");
        person1.say();     
    }
} 

class Person {
    public String name;
    public Person(String name) {
        this.name = name;
    }   
    public void say(){
        System.out.println("姓名:" + name);
    }
}

 执行结果如下:

技术分享

 

  由于Eclipse工具的强大性,使得我们刚把代码放进去,就看到了错误信息。分析这行报错代码,看看也没什么错误啊!这些是正常的对象创建,可问题出在了哪里呢?这个时候内心一定要镇静,千万不要摔电脑。当你通过回溯对象 person时,可以发现此对象创建的时候前面被加了final关键字进行修饰。我说呢?原来是不能再改变了,顿时松了一口气,终于解决了问题。可...可当你向下继续看时,尼玛 person.name = "美美" 怎么没报错啊!不是说不能改变了吗?这时忽然听到谁在说 "别急,别急,先看下面的图再说"。

技术分享

    思路总结:final修饰的对象,表示引用不可变,对象的内容可以改变以及赋值。

final引发的结果