黑马程序员技术交流社区

标题: 今天做的一道题,有点疑惑,想问问大家看有没有合理的... [打印本页]

作者: 赵涛涛    时间: 2014-12-26 23:55
标题: 今天做的一道题,有点疑惑,想问问大家看有没有合理的...
下面关于final说法错误的是 ( AC )        应只选择A
A.        final修饰的类不可以继承其他类               
B.        内部类在局部时,只可以访问被final修饰的局部变量
C.        被final修饰的引用类型变量内部的值是可以发生变化的
D.        final修饰的变量称为常量,这些变量只能赋值一次。       

这道题我想了很久,也感觉不明白。
C这个选项我的理解是:final代表最终的形态。所以修饰的成员不可以被继承(类),也不可以被重写(方法),也不可以被重新赋值(变量),修饰的引用类型变量的话应该是数组,既然被final修饰,按理说里面的数据应该就是固定的吧?
作者: Mr.Ni    时间: 2014-12-27 09:09
final修饰引用类型变量,final只保证这个引用的地址不变,即一直引用同一对象。但这个对象可以改变。例:数组中的元素可以改变
作者: 李小然    时间: 2014-12-27 09:13
本帖最后由 李小然 于 2014-12-27 09:16 编辑

你对"引用类型变量"概念有点模糊
引用类型变量也是变量,只不过值是一个地址。
那么被final修饰的引用类型变量,只是这个变量的值不变,即引用类型变量所引用的地址不变。
至于指向的那个值是没有要求的,完全可以改变的。

"修饰的引用类型变量的话应该是数组"
这句话也有点问题,引用类型不单单指数组,而是泛指所有非基本类型。
就比如你自己写一个Student类,Student student1;这个student1就是一个引用类型。

你可以自己试一下
final Student student1 = new ...
这里的student1.setXxx(xx),是随便修改它的属性的
但是final Student student2 = new ...;student2 = new ...;这样就会报错了
因为第二种让他指向新的一块地址,修改了引用类型变量的值。

哪里不明白继续回复:)
作者: 菜鸟一号    时间: 2014-12-27 10:05
C是正确的,final修饰的引用类型变量的地址是不能变的,内部的值是可以发生变化的。




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