黑马程序员技术交流社区
标题:
final的对于变量作用
[打印本页]
作者:
wyasln
时间:
2015-11-27 10:22
标题:
final的对于变量作用
final可以修饰变量、方法和类
final修饰变量的时候看解释就是赋值后就不可以改变其值了
例如final int num = 1,后面的程序中就不可以再对num赋值,这个好理解
final修饰引用类型的变量的时候,比如final int[] aa = {1,2,3,5};并不是说aa就不能变了,aa[i]一样可以赋值,是这样理解吗
作者:
Myth、骞
时间:
2015-11-27 10:54
1、final int[] aa只是说aa数组这个不能再指向其他数组对象,但它指向的数组的内容是可以变的!
2、final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。
作者:
Good_Man
时间:
2015-11-27 11:09
唉, 这样的第一次见到,,aa[i] 应该还可以赋值吧
作者:
hansnowqiang
时间:
2015-11-27 11:23
本帖最后由 hansnowqiang 于 2015-11-27 11:56 编辑
我说说我的理解:
修饰变量时:final int num =1 ;
在栈中有一个num—>通过一个地址值—>方法区常亮池中的“1”,用final修饰了num就是指这个地址值不能被修改了。
修饰String等类型时是一样的只不过是通过地址值指向了堆中new出来的“内容”这个地址值不能被修改了
修饰引用类型时:final int[] arr = {1,2,3,4}
同理:
在栈中开辟了一个区域有了 int[] arr —>通过一个地址值—>指向了在堆中的{1,2,3,4}这个数组。你可以通过这地址对堆中的这个数组的arr[x]做修改,但是你不能改变这个地址值。
作者:
TG·小强
时间:
2015-11-27 13:29
这个问题是不在于final 而在于基本数据类型与引用型数据类型的实质。基本数据类型引用的数值,当然再被final修饰后不能再赋值;而引用型引用实质是地址,不是数据本身,在被final修饰后,地址值是被固定的,不能在指向其他数组,而数值却可以更改。
作者:
迷茫不堪的年纪
时间:
2015-11-27 20:43
修饰变量, 变为常量, 修饰类不能被继承, 修饰方法 不能被重写
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2