黑马程序员技术交流社区

标题: 是我理解能力有限了,大家帮我看看这题是啥意思 [打印本页]

作者: crossover    时间: 2016-9-6 12:52
标题: 是我理解能力有限了,大家帮我看看这题是啥意思
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
作者: Ryan_Println    时间: 2016-9-6 15:06
修饰一个变量时,这个变量就变成了常量了,我觉得应该是两者都不能被改变
如:
final int MAX=10;
那么MAX就一直指向一个基本字面值常量10,不能被改变,
就是不能给他赋值20或者30
比如再执行
int MAX=20;
是无法执行的

final int MAX=20; 这句也是无法执行的。
他的地址值也是一样不能被改变的。
因为不能把别的地址值给他,
比如
int a;
int MAX=a;
这两句也是行不通的
作者: decetwen1989    时间: 2016-9-6 15:43
public class Test3 {
        public static void main(String[] args) {
                final Person p = new Person(25);
                System.out.println(p.getAge());
               
                p.setAge(100);                                                //引用指向的对象可以改变属性值
                System.out.println(p.getAge());
               
                //p = new Person();                                        //编译报错,引用不能被改变
        }
}

class Person {
        private int age;
       
        public Person() {
                super();
        }

        public Person(int age) {
                super();
                this.age = age;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }
}
作者: 383412263    时间: 2016-9-7 14:24
使用final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改
变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");
执行如下语句将报告编译期错误:
a=new StringBuffer("");
但是,执行如下语句则可以通过编译:
a.append(" broken!");
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:
public void method(final StringBuffer param)
{
}
实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

param.append("a");

我只是大自然的搬运工
作者: chenliying1993    时间: 2016-9-7 16:07
变量为基本数据类型时, 使用final关键字修饰的变量值不可改变。为引用数据类型时,引用的对象不可改变,但对象指向的空间的内容可以修改
作者: helloword000    时间: 2016-9-7 23:29
引用的对象不变的吧,因为已经被final修饰了,引用已经定了




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