final与static final的区别

先看如下例子:
package finalandstatic;
public class StudyFinal {
final int data = (int) (Math.random()*10);
static final int DATAS = (int) (Math.random()*10);
public void print() {
System.out.println(“data:”+data+" DATAS:"+DATAS);
}
public static void main(String[] args) {
StudyFinal sf1 = new StudyFinal();
sf1.print();
System.out.println(“Create new Class”);
StudyFinal sf2 = new StudyFinal();
sf1.print();
sf2.print();
}
}
输出结果:
data:1 DATAS:3
Create new Class
data:1 DATAS:3
data:3 DATAS:3

在对象中final修饰的变量值可能会发生改变(使用final修饰的引用不能被重新赋值,但可以改变引用类型所引用对象的内容)。而static final修饰的变量永远不会改变,在新创建对象的时候,final修饰的属性就可能会改变了。
static强调只有一份,final说明是一个常量,final定义的基本类型的值是不可修改的,但是final定义的引用对象的值是可以改变的。这个变量不可修改但是值又是可变的,可能比较难理解,就是只要用final定义了变量就不能在后面使用这个变量的时候改变这个变量的引用地址,但是引用地址指向的值确没有限定,可以更改。而static final 确是把引用地址和值都给限定了,都不能修改。
static final修饰的变量按编程规范来说要全大写。

猜你喜欢

转载自blog.csdn.net/weixin_44919928/article/details/89488445