首页 > 代码库 > static final 和final的区别 2016.12.07
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。