Java中,使用Final修饰一个变量,是引用不能变,还是引用对象不能变?
是引用对象的地址不能变,引用变量所指的对象的内容可以改变。
final变量永远指向这个对象,是一个常量指针,而不是指向常量的指针。
比如: final StringBuffer sb=new StringBuffer("abc");
对sb重新赋值 sb=new StringBuffer("cde");
会出现编译错误,被final修饰的变量是不能重新赋值的;
但是 sb.append("ced");
是可以编译通过的。
Final作为一个修饰符:
- 可以修饰类、变量、方法
- 被final修饰的类不能被继承。防止子类继承重写父类方法
- 被final修饰的方法不能被重写
- 被final修饰的变量是一个常量只能被赋值一次。(既可以修饰成员变量,也可以修饰局部变量)
- 内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。