码迷,mamicode.com
首页 > 其他好文 > 详细

static final 和final的区别 2016.12.07

时间:2016-12-07 13:26:28      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:ext   second   cond   back   sel   turn   count   object   引用   

学习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

标签:ext   second   cond   back   sel   turn   count   object   引用   

原文地址:http://www.cnblogs.com/qducn/p/6140492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!