您的位置:首页 > 职场人生

你不可不知的final(2)-修饰局部变量(失手率极高的一道面试题)

2016-10-15 12:26 429 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐