一般来说final修饰的变量都会变成常量
凡是对成员变量或者局部变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量。final变量经常和static关键字一起使用,作为常量。
final修饰基本数据类型的变量时,必须赋予初始值且不能被改变,修饰引用变量时,该引用变量不能再指向其他对象
而常量是不可更改的
比如定义一个 final int num = 5;
这个时候 如果还对 num进行赋值操作 如 num = 2;就会报错
因为 常量的意思就是 这个num会指向内存中的一块地址 一旦用final修饰num 这个num所指向的内存地址就不可更改,而5在常量池中的一块内存中 2在另一块内存中 因为num所指向的内存地址不可改变所以会报错
Android Studio也给出了提示 “不能为最终变量num赋值” 也就是说不能改变num所指向的内存地址
第二个例子
这个时候打印的结果却是 “ab”
为什么同样是final修饰的常量 一个内容 可以更改 一个不可以更改
final是说这个引用所指向的内存不可更改 而我们StringBuffer的append()方法 本质上并不是改变 引用指向的内存地址 而是在mStringBuffer所指向的内存中添加数据 他所指向的还是那块内存 只不过内存中的内容发生了改变。