黑马程序员技术交流社区
标题:
关于final关键字的问题 ,急
[打印本页]
作者:
秦桂胜
时间:
2013-11-14 13:47
标题:
关于final关键字的问题 ,急
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
作者:
lyc87007643
时间:
2013-11-14 13:51
是对象的引用不能变,被引用的对象的属性是可以改变的。
作者:
linjl_ll
时间:
2013-11-14 13:54
是引用不能变即指向的对象不能变,指向的对象的内容可以变。
引用变量指向对象涉及到2块内存例如下下面:Object obj = new Object();
obj对应的在栈内存当中有块内存,而new Object()创建的对象存储在堆内存当中,obj对应的内存存储的值是对象在堆内存中的首地址,的那个obj被final修饰时,指的是它对应的内存存储的对象的首地址不能变,所以所指向的对象的内容是可以变得.
作者:
lichao
时间:
2013-11-14 14:24
public final int i=3; //被final所修饰
//i=4; //这样就是错误的 不能对其引用改变。
作者:
星星Fighting
时间:
2013-11-14 14:32
被final修饰了的变量在内存中,其内容是会固定的,即内容不能改变的,即final String str = "ssss";一旦进入内存中之后,该字符串的值就不能发生变化了,一旦发生变化,就会报错的!但是此时该对象的引用是可以变化的,当在final变量的前面再加上static的时候,该对象的引用也不能变化,就是说对于static final String = "str";中str已经是一个常量了,此时内容和引用的地址都不能发生变化!
如下所示:
final String str = "你好,final!";
str="所示";这是无法编译的,即内容不能改变的,但是地址是可以改变的!
作者:
菜不鸟
时间:
2013-11-14 22:43
是引用是不能变的!使用final修饰的变量即成为常量,常量是不能可以修改的!
作者:
bpsend
时间:
2013-11-14 23:37
这个要看数据类型了,引用数据类型就是引用地址不能被改变,引用地址指向对象中的成员属性是可以被改变的。基本数据类型的话就是值不能变。
hh.png
(31.74 KB, 下载次数: 22)
下载附件
2013-11-14 23:36 上传
作者:
杨增坤
时间:
2013-11-14 23:42
final可以修饰成员变量,也可以修饰局部变量、形参。final变量一旦获得初始值之后,final的变量就不能被重新赋值。
成员变量是随类初始化或对象初始化而初始化的,当执行静态初始化块时候可以对类属性进行赋初始值,当执行普通初始化块或者构造器的时候可以对实例属性赋初始值。因此成员变量的初始值可以在定义的时候赋值或者在初始化块、构造器中指定。
对于final修饰的成员变量而言,一旦有了初始值之后,就不能被重新赋值,因此不可以在普通方法中对成员变量赋值。要么在定义的时候赋值,要么在方法块和构造器中赋值。
final成员变量,必须由程序员显示初始化,系统不会对final成员进行隐式初始化。
final修饰局部变量时既可以在定义时候指定默认值,也可以不指定,在后面指定,但只能一次。
final修饰基本类型的时候 变量不能改变
final修饰引用类型变量,final只保证这个引用的地址不变,即一直引用同一对象。但这个对象可以改变。
上面是找到的资料:
总结就是:final修饰的基本类型的变量:只要赋给了值,其值就不能呗改变
final修饰的是引用变量,只要其引用地址没有变,其对应的值是可以改变的,(就和你说的数组就是引用类型)
public static void main(String[] s) {
final int[] Arr = { 5, 6, 12, 8 };//引用类型,其值是可以改变的
Arr[2] = -8;
System.out.println(Arr[2]);
final int num=1;//基本类型,其值是不可以变的
//num=10;//num 有了初值,不能更改
final ArrayList list=new ArrayList();//集合是引用类型,所以其中元素的值是可以改变的
list.add(1);
list.add(2);
System.out.println(list);
list.set(0, 0);
System.out.println(list);
}
结果:
-8
[1, 2]
[0, 2]
希望对你有帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2