6.4.3 fina修饰基本类型变量和引用类型变量的区别

6.4.3 fina修饰基本类型变量和引用类型变量的区别

final修饰基本类型变量时 基本类型变量不可变

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变,

final修饰引用类型变量时 引用变量不可指向其他对象

但对于引用类型变量而言,它保存的仅仅是一个引用, final只保证这个引用类型变量所引用的地址不会改变,即要一直引用同一个对象,但这个对象完全可以发生改变。

虽然引用变量不可指向其他对象 但对象的值可以改变

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

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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;
}
}