final修饰基本类型变量和引用变量区别

一 概念介绍

1 当使用final修饰基本数据类型时,不能对其重新赋值,不能被改变。

2 当使用final修饰引用类型变量时,它仅仅保证他的地址不变,即一直引用同一个对象,但这个对象完全可以发生改变。

二 final修饰引用类型变量应用

1 代码示例

import java.util.*;

class Person
{
	private int age;
	public Person(){}
	// 有参数的构造器
	public Person(int age)
	{
		this.age = age;
	}
	// 省略age的setter和getter方法
	// age的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实例变量,合法
		p.setAge(23);
		System.out.println(p.getAge());
		// 下面语句对p重新赋值,非法
		// p = null;
	}
}

2 运行结果

[5, 6, 12, 9]

[5, 6, 9, 12]

[5, 6, -8, 12]

23

3 结果分析

使用final修饰的引用不能被重新赋值,但可以改变引用类型所引用对象的内容。

猜你喜欢

转载自cakin24.iteye.com/blog/2329385