static final 和final的区别 2016.12.07
Posted 奋斗的蜗牛cn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static final 和final的区别 2016.12.07相关的知识,希望对你有一定的参考价值。
学习java的时候常常会被修饰符搞糊涂,这里总结下static final和final的区别。
1、static 强调只有一份,final 说明是一个常量,final定义的基本类型的值是不可改变的,但是fianl定义的引用对象的值是可以改变的,下面举个例子来说明:
package DifStaticFinalAndFinal; class SelfCounter { private static int counter; private int id=counter++; public String toString(){ return "SelfCounter: "+id; } }
package DifStaticFinalAndFinal; class WithFinalFields { static final SelfCounter wffs=new SelfCounter(); final SelfCounter wff=new SelfCounter(); public String toString(){ return "wff= "+wff+",\n wffs= "+wffs; } }
主函数:
package DifStaticFinalAndFinal; public class StaticFinal { public static void main(String[] args) { System.out.println("First Object:"); System.out.println(new WithFinalFields()); System.out.println("Second Object:"); System.out.println(new WithFinalFields()); } }
运行结果:
First Object: wff= SelfCounter: 1, wffs= SelfCounter: 0 Second Object: wff= SelfCounter: 2, wffs= SelfCounter: 0
分析为什么wff两次的运行结果不同,而wffs两次的运行结果相同?
因为wffs这个容器是用static final来定义的,static 强调只有一份,因此只有一个值,
而final修饰的引用是可以变化的,因此wff的值是可以变化的,这也是final修饰基本类型和引用的不同。
以上是关于static final 和final的区别 2016.12.07的主要内容,如果未能解决你的问题,请参考以下文章