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原理进行判断。
常量都是把值放在栈中,而对象,则数据放在堆中,而栈里面的分配一个值,引用堆中的地址。
对于常量这种基础类型数据而言,值改变了,本身就改变了。
对于对象而言,引用地址改变了,才真正改变了。 因为我们调用的其实的栈里面的值,至于堆中里面存着的数据是否改变,是不管的。