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修饰后,如果是基本类型,无法改变其值(也可以说成是:不可以对其重新赋值;如果是对象类型,是可以改变其值的,但不可以对其重新赋值

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

转载于:https://www.cnblogs.com/liushengit/p/9887297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值