A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面关于final说法错误的是 ( AC )        应只选择A
A.        final修饰的类不可以继承其他类               
B.        内部类在局部时,只可以访问被final修饰的局部变量
C.        被final修饰的引用类型变量内部的值是可以发生变化的
D.        final修饰的变量称为常量,这些变量只能赋值一次。       

这道题我想了很久,也感觉不明白。
C这个选项我的理解是:final代表最终的形态。所以修饰的成员不可以被继承(类),也不可以被重写(方法),也不可以被重新赋值(变量),修饰的引用类型变量的话应该是数组,既然被final修饰,按理说里面的数据应该就是固定的吧?

3 个回复

倒序浏览
final修饰引用类型变量,final只保证这个引用的地址不变,即一直引用同一对象。但这个对象可以改变。例:数组中的元素可以改变
回复 使用道具 举报
本帖最后由 李小然 于 2014-12-27 09:16 编辑

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

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

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

哪里不明白继续回复:)
回复 使用道具 举报 1 0
C是正确的,final修饰的引用类型变量的地址是不能变的,内部的值是可以发生变化的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马