Java基础-final关键字用在不同处的作用及区别

Posted liushengit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础-final关键字用在不同处的作用及区别相关的知识,希望对你有一定的参考价值。

1、final修饰的类:不能被其他类继承;
2、final修饰的方法:不能被子类重写
3、final修饰的变量

  先理解两个概念:基本类型变量、引用变量。

  基本数据类型变量:存的是数值本身,存放在栈内存中;

  引用类型变量:存的是数据的地址,数据存放于堆内存中,引用变量是以间接的方式获取数据的;

final修饰的引用变量:一旦给其赋值,就不能被再次赋值(并非:不能改变其值)

final String s = "32"; 
s = "1";//报错

final TestClass obj = new TestClass();
obj = new TestClass();//报错
/** 报错:The final local variable s cannot be assigned. It must be blank and not using a compound assignment */

final修饰的基本类型变量:一旦给其赋值,不能改变其值

final int i = 0; 
i = 2;//报错
/** 报错:The final local variable s cannot be assigned. It must be blank and not using a compound assignment */

 

1.4 被final修饰的方法参数

  见网上有人说:“方法参数被final修饰后,在方法体内就无法改变其值”,我觉得这种说法不太严谨的。有时会误导java初学者或新手;

  下面咱们通过举例一步一步来深入理解一下。

例1:方法参数为基本类型,不加final

  

  上面例子说明问题:方法参数为基本类型时,即便不加final,也是无法改变其值的

  方法参数为基本类型时,此时形参i是实参i的一个拷贝,形参i函数体不管怎么赋值都不会影响外面 i 值的变化的;

例2:方法参数为基本类型,加final

  

  上面例子说明问题:方法参数为基本类型时,给其加上final修饰后,在函数体内是不可以对参数重新赋值的;

 例3:方法参数为对象时,不加final

  

   上面例子说明问题:方法参数为对象类型时,不加final,是可以改变其值的;

例4:方法参数为对象时,加final

   

  上面例子说明问题:方法参数为对象类型时,加final,是可以改变其值的;但不可以对参数重新赋值;

总结:“方法参数被final修饰后,在函数体内就无法改变其值” 这句话应该改为:

方法参数被final修饰后,如果是基本类型,无法改变其值(也可以说成是:不可以对其重新赋值;如果是对象类型,是可以改变其值的,但不可以对其重新赋值

==============================================
我不能保证文章中每个观点都是对的,但是至少保证每一句话、每一行代码都经过了认真的推敲、仔细的斟酌。
每一篇文章的背后,希望都能看到自己对于技术、对于生活的态度。
==============================================

以上是关于Java基础-final关键字用在不同处的作用及区别的主要内容,如果未能解决你的问题,请参考以下文章

Java基础系列--final关键字

Java基础 -- 关键字Static和Final

Java基础-final关键字分析

Java基础_final和static区别

java基础-001

JAVA 基础--final 关键字的用法