APP下载

基于简单实例的final关键字深入剖析

2018-06-04

关键词:常量数据类型关键字

(长沙学院计算机工程与应用数学学院 湖南长沙 410075)

引言

final修饰的类、变量和方法具有以下特性:

1. final修饰的类不能被继承。

2. final修饰的方法不能被子类重写。

3. final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。

一、final修饰基本数据类型与引用数据类型的区别

修饰变量是final用得最多的地方,数据类型有基本数据类型与引用数据类型,当final修饰基本数据类型时,被修饰的数据就相当于我们自己直接定义的常量,理解与应用与一致,但当修饰引用数据类型变量时,会有所不同,这是本文接下来要重点阐述的内容。首先了解一下final变量的基本语法:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 接下来举个例子深入分析final关键字修饰引用类型数据的性能:

上述代码运行结果为:

分析上述输出结果可知,就final修饰基本数据而言,我们会得出第一个输出结果应该也是false,因为final修饰变量时,就相当于常量。但输出结果却相反。实际第一个输出结果为true,而第二个结果为fasle。这里面就是final变量和普通变量的区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。因此在上面的一段代码中,由于变量b被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b替换为它的值。而对于变量d的访问却需要在运行时通过链接来进行。

二、final修饰引用类型对像变量

在上面提到被final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容是否可变呢?下面通过实例验证。

运行结果为:

由运行结果可知,final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容是可变的。

结语

总上所述,Final关键字在修饰变量时,该变量就为常量,这是针对基本数据类型而言的,我们要区分及深入理解分析 final修饰引用类型数据时,其起的应用性能。另外,很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而 final的作用是用来保证变量不可变, final比static更加专一。

[1]http∶//www.cnblogs.com/beanmoon/archive/2012/04/25/2470298.html

[2] 安博教育集团,Java核心技术[M].北京:电子工业出版社,2012

[3] 高永强,Java编程艺术[M].北京:清华大学出版社,2009.

[4] 王善发,吴道荣,Java编程中static和 final关键字的陷阱,保山学院学报,2012,31(5):19-22

猜你喜欢

常量数据类型关键字
科学照亮世界
——卡文迪什测定万有引力常量
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
如何理解数据结构中的抽象数据类型
成功避开“关键字”
一次函数的学习引导
基于SeisBase模型的地震勘探成果数据管理系统设计
线上众筹产品的特征分析与研究
相似度计算及其在数据挖掘中的应用
智能垃圾箱
解决常量与变量问题的四种策略