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的主要内容,如果未能解决你的问题,请参考以下文章

static final 和final的区别 2016.12.07

java final static 和final区别

static final static final 区别

Java基础_final和static区别

C++ 中static 和final的区别是啥

staticfinalstatic final 用法