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