急!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=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就过不去