急!java高手进!一个java小问题!!!

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:40:21
final A a-newA();
A b=new A();
a=b;
既然a已经声明为final了,为什么这段程序是对的啊!!!???
变量a为类A的一个引用
b同时为A的另一个引用
既然把a声明为final,也就是说a指向的那片地址空间是不能改了,可是这个时候把b赋值给a,为什么还可以赋值呢???

a这时在内存中还有位置
只是把b的引用给了a
现在的a其实是b
本来的a还在内存里面

经理 五级 总监 八级...相当无语

这段代码不能编译。

public class FinalTest{
    public static void main(String[] args){
        final A a = new A();
        A b = new A();
        a = b;
    }
}

class A{
}
编译时报告:无法为最终变量 a 指定值

记住final是不可变的就好了。

对象类型的final类型,你可以对这个对象做任意的操作。
只要不指向另外一个对象,那都是正确的。

对于final 的基本数据类型而言,就不能改变他们的值了,
但是做比较运算也应该是正确的。

上面的回答是错误,这个问题本身是正确的 没有什么错误.

正因为声明了final这段程序才是对的,常量是允许对象之间引用内存地址。
如果不声明final那么会报错,因为两个对象的内存地址是不一样的。

不知道你的JDK版本是什么,或者你写得不清楚~~~~但是我在编译的时候是错误的~~~~俺用的IDE是Eclipse3.2+jdk1.6就过不去