黑马程序员技术交流社区
标题:
final的问题
[打印本页]
作者:
王鑫宇
时间:
2011-7-30 10:25
标题:
final的问题
使用final关键字修饰一个变量时,是引用不能变还是引用的对象不能变?
作者:
匿名
时间:
2011-7-30 10:39
final关键字修饰的成员变量的对象引用不能修改
public class racing_cycle
{
public final static int i = 11;
public static void main(String args[])
{
racing_cycle rc = new racing_cycle();
i = i + 1;
System.out.println(i);
}
}
这段代码运行时就会发生错误,因为在前面将 i 变量定义为final类型,该值是不可以改变的。main方法中
要将变量i + 1 所以就会出错。
作者:
匿名
时间:
2011-7-30 10:39
final 用于对象引用,使引用恒定不变,一旦引用被初始化指向一个对象,就无法对它进行改变以指向另一个对象。然而,对象其本身是可以修改的,Java并未提供使任何对象恒定不变的途径。
作者:
匿名
时间:
2011-7-30 10:46
这种问题论坛有很多人发了,你可以---在论坛logo下输入关键字搜索
[color=Red]是引用不能变,但是引用所指向的对象是可以变得[/color]
因为对于[color=Blue]引用类型的变量而言,他保存的仅仅是一个引用[/color],
[color=Red]final修饰的只能保证这个引用所引用的地址不会改变,即只要一直引用同一个对象,但是这个对象完全可以发生改变[/color]
我们用程序来说明这一点:[code=java]package cn.itcast.heima
import java.util.Arrays;
class Person
{
private int age;
//无参构造方器
public Person(){}
//有参构造方器
public Person(int age)
{
this.age = age;
}
//age属性的setter、getter方法
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
}
public class Demo
{
public static void main(String[] args)
{
//final修饰数组变量,iArr是一个引用变量
final int[] iArr = {5, 6, 12, 9};
System.out.println(Arrays.toString(iArr));
//对数组元素进行排序,合法
Arrays.sort(iArr);
System.out.println(Arrays.toString(iArr));
//对数组元素赋值,合法
iArr[2] = -8;
System.out.println(Arrays.toString(iArr));
//下面语句对iArr重新赋值,非法
iArr = null;
//final修饰Person变量,p是一个引用变量
final Person p = new Person(45);
//改变Person对象的age属性,合法
p.setAge(23);
System.out.println(p.getAge());
//下面语句对p重新赋值,非法
//p = null;
}
}[/code]您也可以参考这个帖子了解更多的内容
[url]http://bbs.itheima.com/thread-268-1-1.html[/url]
作者:
匿名
时间:
2011-7-30 11:05
引用的对象不能变
作者:
匿名
时间:
2011-7-30 11:16
哦,好吧,虽然有俩种答案,也明白了。谢谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2