黑马程序员技术交流社区

标题: 一个关于final关键字的问题 [打印本页]

作者: 张龙欢    时间: 2013-5-6 23:43
标题: 一个关于final关键字的问题
本帖最后由 张龙欢 于 2013-5-8 18:37 编辑

我们在使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

作者: ZhaoYuBetter    时间: 2013-5-6 23:56
可以有多个引入,但引入的对象不能改变:
例子:
public class FinalTest {
        public static void main(String[] args) {
                final Student s1 = new Student();               
                Student s2 = s1;
                s2.setAge("cc");                // 设置无效;
                System.out.println(s1.getAge());               
                System.out.println(s2.getAge());
        }
}

class Student {
        private String name;
        private String age = "1";
       
        public void setAge(String age) {
                this.age = "aa";
        }
       
        public String getAge() {
                return age;
        }
}
作者: 孙金鑫    时间: 2013-5-7 00:55
final修饰的变量不能变,如果是对象,里面的东西可以变化的
作者: 年轻的棒棒    时间: 2013-5-7 01:18
使用final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改
变的。
final StringBuffer a=new StringBuffer("immutable");
a=new StringBuffer("");//这个是不行的
a.append(" broken!");//这个却是可以的
作者: 刘兆华    时间: 2013-5-7 05:14
final修饰变量,变量就变成了常量。第一次赋值将成为最终值,无法再次赋值和修改。因为你final修饰的是变量并不是修饰的那个对象中的内容,所以对象中的内容可以更改。
作者: 何锦权    时间: 2013-5-7 13:58
用final修饰的引用型变量,是指改引用变量的值不变,该值所指向的对象的属性等是可以改变的
作者: 任江峰    时间: 2013-5-7 20:17
是指引用不能改变:
final Object obj=new Object();
obj变量不能重新赋值,而obj指向的对象内容是可以改变的。
作者: 黑马-雷钊    时间: 2013-5-8 14:41
被final修饰的变量将是那个变量的最终值,不能再次被赋值了。但可以调用。被final修饰的方法只能被调用。不能复写。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2