final关键字

final关键字可以修饰类,方法,常量。

大家都知道,final修饰的对象不可以改变,但是要注意的是:

1.如果是常量,是基础数据类型,所以不可以重新赋值。

2.如果是其他对象,比如StringBuffer,只要引用地址不改变,可以对内存里面的数据进行修改。

例子:

 final StringBuffer s=new StringBuffer("aa");
         System.out.println(s);
         s.append("bb");
         System.out.println(s);

  这里打印:

       aa

  bb

原理分析:

具体原因,还是 要根据jvm原理进行判断。

常量都是把值放在栈中,而对象,则数据放在堆中,而栈里面的分配一个值,引用堆中的地址。

对于常量这种基础类型数据而言,值改变了,本身就改变了。

对于对象而言,引用地址改变了,才真正改变了。 因为我们调用的其实的栈里面的值,至于堆中里面存着的数据是否改变,是不管的。

 

posted @ 2019-05-28 17:36  不加班不熬夜的男子  阅读(95)  评论(0编辑  收藏  举报