final 变量
2014-07-10 22:36
127 查看
一。final对象
使用final关键字修饰一个变量时,是指引用不能变,引用的对象中的内容还是可以改变的。例如,对于如下语句:final StringBuffer a=new StringBuffer("immutable"); // a=new StringBuffer(""); //编译出错 a.append(" broken!"); // 可以
传入final参数不能阻止方法内部修改传进来的参数对象:
public void method(final StringBuffer param){ param.append("a"); }
3.数组也是对象
final int[] count=new int[1]; //count[0] = 9; count[0] = 100 都可以
综上:栈上的内容不能修改,但堆上的内容可以修改。
数组元素是存在堆中的,但是直接给一个变量赋值, 是在栈中直接对变量赋值,数组是从栈中向堆中引用。我画不了图,╮(╯▽╰)╭ ,
简单的说,数组是两部分组成的,栈中定义的是变量和引用,然后数组又有0、1、2、……,对应着数组中的元素,所以final定义的数组,
数组里面的值就能改,而final定义的直接给一个变量赋值就不能改。
二。final 基本类型
public class Something { public int addOne(final int x) { return ++x; //出错 。 x 被修饰成final } }
三。内部类使用的外部变量
应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期。
相关文章推荐
- 使用Java中的final变量需要注意的地方。
- Java的局部内部类以及final类型的参数和变量
- 接口中定义变量必须为public static final的原因
- JAVA 关于final修饰变量参数
- 为何在匿名内部类中只能问被final修饰的本地变量?
- 为什么匿名内部类只能访问其所在方法中的final变量
- 《final修饰基本类型变量和引用类型变量的区别》
- Java ,方法,变量前加final 各有什么不一样?
- 匿名类和final外部变量的实现
- 表达式转型注意事项,和final修饰的变量会被JVM优化
- 使用final声明变量的注意事项
- 接口中定义变量必须为public static final的原因
- 内部类中引用的变量必须要声明为final的原因
- 面向对象_final关键字修饰类,方法以及变量的特点
- java接口的变量为什么是public static final 的
- 得瑟一下jdk源代码解析,如何在运行时修改java final变量
- final变量的初始化方式
- 为什么list变量被定义为final了还能add
- -Java forEach中 Lambda Expr中的 final变量要求
- static/final 变量以及异常处理