/* 面试题:final修饰局部变量的问题 基本类型:基本类型的值不能发生改变。 引用类型:引用类型的(地址值)(不能发生改变),但是,该对象的堆内存的值是可以改变的。 */ class Student { int age = 10; } class FinalTest { public static void main(String[] args) { //局部变量是基本数据类型 int x = 10; x = 100; System.out.println(x); final int y = 10; //无法为最终变量y分配值 //y = 100;//y是最终的,不能再次被赋值!/基本类型的值不能发生改变 System.out.println(y); System.out.println("--------------"); //局部变量是引用数据类型 Student s = new Student(); System.out.println(s); System.out.println(s.age); s.age = 100;//堆内存中的值可以改变的 System.out.println(s.age); s = new Student();////重新分配内存空间,new一次就重新分配一次内存空间。此时改变了地址 System.out.println(s); System.out.println("--------------"); final Student ss = new Student();//引用类型被fianl修饰后,ss的地址不会再发生改变。不能再new一个值给ss了 System.out.println(ss); System.out.println(ss.age); ss.age = 200;//对象对应的堆内存中的值可以改变的 System.out.println(ss.age); //无法为最终变量ss分配值 ss = new Student();////重新分配内存空间错误,不能再new了,final修饰之后就限定 地址不再变化不能再new了。 //System.out.println(ss); } }