我们在写程序的时候通常能看到将一个类型定义为final类型,前几日刚好遇到一些困惑,查看资料后在此做一下摘录:
理解final最主要的是这句话:定义为final的变量,指的是该变量的 “引用” 不能被再次赋值。
比如:
final int a=1; 这边定义的int类型a,他其实直接是放在栈里面的,固然不能重新对其赋值。final String str="abc"; 这边定义了一个String类型str ,这个str指向的是常量池中"abc"的位置,即"abc"的引用,所以我们对其重新赋值的时候,引用会改变,这与final的定义相违背。final int[] arr=new int[5]; 这里我们定义了一个数组,那arr的引用其实是数组大开始地址,当我们再进行arr=new int[3];时,这是不被允许的,因为其引用会改变。当我们对其进行赋值,如:arr[0]=0;arr[1]=1; 这些操作的时候,其引用并没有改变,所以这是被允许的。
同样的,我们也可以类推到自定义的类 如:Stu类中有name字段
final Stu stu=new Stu("fzy"); 这时,我们对这个stu的name重新赋值也是没有问题的, stu.setName("zy");
新闻热点
疑难解答