A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型变量而言,他保存的只是一个引用,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以改变。

  1. import java.util.*;

  2. class Person
  3. {
  4.         private int age;
  5.         public Person(){}
  6.         //有参数构造器
  7.         public Person(int age)
  8.         {
  9.                 this.age = age;
  10.         }
  11.         //省略age Field的setter和getter方法
  12.         //age Field的setter和getter方法
  13.         public void setAge(int age)
  14.         {
  15.                 this.age = age;
  16.         }
  17.         public int getAge()
  18.         {
  19.                 return this.age;
  20.         }
  21. }
  22. public class FinalReferenceTest
  23. {
  24.         public static void main(String[] args)
  25.         {
  26.                 //final修饰数组变量,iArr是一个引用变量
  27.                 final int[] iArr = {5, 6, 12, 9};
  28.                 System.out.println(Arrays.toString(iArr));
  29.                 //对数组元素进行排序,合法
  30.                 Arrays.sort(iArr);
  31.                 System.out.println(Arrays.toString(iArr));
  32.                 //对数组元素赋值,合法
  33.                 iArr[2] = -8;
  34.                 System.out.println(Arrays.toString(iArr));
  35.                 //下面语句对iArr重新赋值,非法
  36.                 //iArr = null;
  37.                 //final修饰Person变量,p是一个引用变量
  38.                 final Person p = new Person(45);
  39.                 //改变Person对象的age Field,合法
  40.                 p.setAge(23);
  41.                 System.out.println(p.getAge());
  42.                 //下面语句对p重新赋值,非法
  43.                 //p = null;
  44.         }
  45. }
复制代码
运行结果:


从上面程序中可以看出,使用final修饰的引用类型变量不能重新赋值,但可以改变引用类型变量所引用的对象内容。

1 个回复

正序浏览
只要引用的地址指向不改变就OK,改成null或者其它的地址引用的地址就变了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马