黑马程序员技术交流社区
标题:
final修饰基本类型变量和引用类型变量的区别
[打印本页]
作者:
leejun同学
时间:
2015-4-2 11:06
标题:
final修饰基本类型变量和引用类型变量的区别
当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型变量而言,他保存的只是一个引用,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以改变。
import java.util.*;
class Person
{
private int age;
public Person(){}
//有参数构造器
public Person(int age)
{
this.age = age;
}
//省略age Field的setter和getter方法
//age Field的setter和getter方法
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
}
public class FinalReferenceTest
{
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 Field,合法
p.setAge(23);
System.out.println(p.getAge());
//下面语句对p重新赋值,非法
//p = null;
}
}
复制代码
运行结果:
dd.jpg
(18.52 KB, 下载次数: 32)
下载附件
2015-4-2 11:04 上传
从上面程序中可以看出,使用final修饰的引用类型变量不能重新赋值,但可以改变引用类型变量所引用的对象内容。
作者:
kfcka
时间:
2015-4-2 14:12
只要引用的地址指向不改变就OK,改成null或者其它的地址引用的地址就变了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2