final 修饰指向的引用不能变
一、修饰属性
1. 修饰普通成员变量
1) 在等号后边赋值 2) 构造函数中赋值 3) 在代码块中赋值
2. 静态变量
1) 在等号右边赋值 2) 在静态代码块中赋值
3. 方法中的变量:不要求赋值时机,在使用时间必须赋值
二、修饰方法
1. 不允许修饰构造方法
2. 修饰普通方法不可被重写。 引申:静态方法不能被重写
三、修饰类
不可被继承
把变量写在线程内部 – 栈封闭
面试题:
答案: true false
String a = “wukong2”;
final String b = “wukong”;
String d = “wukong”;
String c = b + 2;
String e = d + 2;
System.out.println(a == c);
System.out.println(a == e);
因为 b 被 final 修饰,在编译时会直接引用 “wukong”, 因为 a 已经建立过 wukong2 的空间
所以 c 会指向和 a 一样的地址空间
而 d 没有被final修饰,所以不知道常量池中的内容,e 只有在运行时才会知道具体内容 e 指向堆的内容