final,拒绝修改,防止世界被熊孩子破坏,维护世界和平!
今天我们看一道失手率极高的面试题,final修饰局部变量。
final修饰局部变量又可以分为修饰基本数据类型的局部变量和引用类型的局部变量两种情况。
我们先看final修饰基本数据类型的局部变量:
int x = 10;
x = 100;
final int x = 10;
x = 100;
The final local variable x cannot be assigned. It must be blank and not using a compound assignment
这段代码大家都不会有疑问。
因此,我们的第一条结论:final修饰基本数据类型的局部变量,值不变。
我们再看final修饰引用类型的局部变量:
class Father{
private int x = 10;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
Father f = new Father();
System.out.println(s.getX());
s.setX(100);
System.out.println(s.getX());
输出10,100。
如果这样呢?
final Father f = new Father();
System.out.println(s.getX());
s.setX(100);
System.out.println(s.getX());
试一下,依然输出输出10,100。
什么鬼?说好的final呢?
我们可以试试这样:
f = new Father();
终于报错:
The final local variable f cannot be assigned. It must be blank and not using a compound assignment
其实很好理解,引用类型的局部变量对应的是地址值(内存空间),即内存空间不变。
因此,我们的第二条结论:final修饰引用类型的局部变量,地址值不变。
ok,一道失手率极高的面试题,你中招了吗?
2条结论,Get。