黑马程序员技术交流社区

标题: 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? [打印本页]

作者: 黄坚声    时间: 2012-5-9 20:08
标题: 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
如题,谁能给我解答
作者: 周素强    时间: 2012-5-9 20:26
被final修饰的变量,这个变量其实引用的是对象的内存地址,如果你这个对象变了,那么这个变量引用的地址不也就变了吗,所以对象和引用都不能变。也是不可变的。
作者: 李啸    时间: 2012-5-9 21:05
[attach]2569[/attach]
懂了吗
作者: 任睦强    时间: 2012-5-9 21:27
使用final修饰引用型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可以改变的。
作者: 常万    时间: 2012-5-9 22:00
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
举个例子你就能看懂了:请看下面代码
final StringBuffer sb = new StringBuffer("aaa");
执行下面语句就会报错
sb =new StringBuffer("bbb");
但是执行下面语句就可以编译通过
sb.append("bbb");

作者: 黑马-王建雨    时间: 2012-5-9 22:56
final修饰的变量若是引用数据类型,该变量在栈内存中存放的是此对象的内存地址,故此对象不可变。对象的内容是可以变化的。如下代码:finally int [] arr = {1,2};
                                                     arr[1] = 0;
虽然arr的内容变了,但是变量arr内存的首地址没变。




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