码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-03-02 10:57:33      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:final   数据   图片   继承   and   tcl   family   方式   class   

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关键字用在不同处的作用及区别

标签:final   数据   图片   继承   and   tcl   family   方式   class   

原文地址:https://www.cnblogs.com/liushengit/p/9887297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!