黑马程序员技术交流社区
标题:
使用final关键字修饰一个变量时
[打印本页]
作者:
黄方
时间:
2012-3-11 22:53
标题:
使用final关键字修饰一个变量时
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
作者:
房宝彬
时间:
2012-3-11 23:01
Final 中文意思,最终的,唯一的,在JAVA里 被Final修饰的变量 称之为全局常量,变量值不可以被改变,
你说的引用 和引用对象 是指变量名和变量值么?
final修饰的变量在栈中,只不过它修饰的变量只能赋一次值。因此对每个new出来的对象来说,final修饰的变量具有唯一的特点,因为赋了一次值后就不能改变了
作者:
黄方
时间:
2012-3-11 23:14
房宝彬 发表于 2012-3-11 23:01
Final 中文意思,最终的,唯一的,在JAVA里 被Final修饰的变量 称之为全局常量,变量值不可以被改变,
你说的引 ...
额,我是指这一种 final StringBuffer a=new StringBuffer("immutable");
作者:
宋洪祥
时间:
2012-3-11 23:22
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");
执行如下语句将报告编译期错误:
a=new StringBuffer("");
但是,执行如下语句则可以通过编译:
a.append(" broken!");
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:
public void method(final StringBuffer param)
{
}
实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:
param.append("a");
作者:
OMG
时间:
2012-3-11 23:23
对的,final修饰的变量的值是不能被重新赋值的。
作者:
刘豪杰
时间:
2012-3-11 23:26
对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然后对象自身却是可以被修改的。比如:
class Value
{
int i;
public Value(int i){this.i=i;}
}
public class FinalData
{
private Value v1=new Value(8);
private final Value v2=new Value(11);
public static void main(String[] args)
{
FinalData fd=new FinalData();
fd.v1.i++; //可以,因为v1可以改变
fd.v2.i++; //可以,对象本身可以改变
fd.v1=new Value(12); //可以,因为不是final
fd.v2=new Value(15); //错误!因为v2是final,引用恒定不变
}
作者:
贠(yun)靖
时间:
2012-3-12 02:55
final 关键字
1,可以修饰类,函数,变量。
2,被final修饰的类不可以被继承。
3,被final修饰的方法不可以被覆盖(重写)。
4,被final修饰的变量时一个常量只能赋值一次,即可以袖手成员变量,又可以修饰局部变量。把被修饰的变量视为常量,且常量的书写规范所有字母都大写,多个单词时,用“_”分开即可。
5,内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2