你不可不知的final(2)-修饰局部变量(失手率极高的一道面试题)
2016-10-15 12:26
429 查看
final,拒绝修改,防止世界被熊孩子破坏,维护世界和平!
今天我们看一道失手率极高的面试题,final修饰局部变量。
final修饰局部变量又可以分为修饰基本数据类型的局部变量和引用类型的局部变量两种情况。
我们先看final修饰基本数据类型的局部变量:
第二种情况报错:
The final local variable
x cannot be assigned. It must be blank and not using a compound assignment
这段代码大家都不会有疑问。
因此,我们的第一条结论:final修饰基本数据类型的局部变量,值不变。
我们再看final修饰引用类型的局部变量:
如果这样呢?
什么鬼?说好的final呢?
我们可以试试这样:
The final local variable f cannot be assigned. It must be blank and not using a compound assignment
其实很好理解,引用类型的局部变量对应的是地址值(内存空间),即内存空间不变。
因此,我们的第二条结论:final修饰引用类型的局部变量,地址值不变。
ok,一道失手率极高的面试题,你中招了吗?
2条结论,Get。
今天我们看一道失手率极高的面试题,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。
相关文章推荐
- 你不可不知的final(3)-初始化时机(失手率比较高的一道面试题)
- java面试题:final修饰局部变量的问题
- 为什么局部变量必须以final修饰(或者有final实效:java8)才可以在内部类中使用?
- Final关键字修饰变量时,是引用变量的值不可变,还是对象的值不可变呢?
- J2SE基础夯实系列之String字符串不可变的理解,不可变类,final关键字到底修饰了什么
- 为什么匿名内部类和局部内部类只能访问被final修饰的局部变量?
- 关于final修饰局部变量问题
- final修饰变量 与 不可变对象
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- J2SE基础夯实系列之String字符串不可变的理解,不可变类,final关键字到底修饰了什么
- final修饰的变量是引用不可变,还是对象不可变
- 面试题:List去重,不可不知的五种方法
- Java--局部内部类在访问他所在方法中的局部变量必须用final修饰
- 匿名内部类使用外部的局部变量时为什么一定要final修饰
- 局部内部类 局部内部类访问局部变量必须用final修饰
- 为什么内部类访问局部变量需要加final修饰?
- 局部内部类访问的局部变量不必用final修饰,java8中
- 关于Java Final 修饰的局部变量,多线程可以访问
- 局部内部类只能访问方法内被final修饰的局部变量
- 于java里方法的内部类只能访问被final修饰的局部变量和.