Ser*_*ero 5 java static final field constants
第一个例子
public class MyClass {
final int x = 2;
}
Run Code Online (Sandbox Code Playgroud)
x是
第二个例子
public class MyOtherClass {
static final int x = 3;
}
Run Code Online (Sandbox Code Playgroud)
x是
我的问题是
两者有什么不同?(不包括创作时间)
我错过了什么吗?
xin MyClass和之间的区别MyOtherClass是:
第一个只能通过MyClass实例访问,并且可以有常量的多个副本.
第二个可以在没有MyOtherClass实例的情况下访问,只能存在一个副本.
在您的示例中,具有常量的一个或多个实例之间没有实际差异1.但考虑一下:
public class YetAnotherClass {
final int x;
public YetAnotherClass(int x) {
this.x = x;
}
}
Run Code Online (Sandbox Code Playgroud)
...显示实例常量在不同实例中如何具有不同的值.
1 - 这是夸大其辞.首先,static final int x = 3;声明一个编译时常量,并且可以在switch case表达式中使用编译时常量,其中非编译时常量不能.其次,常量的非静态版本将占用每个实例中的空间MyClass.最后,如果你足够愚蠢地尝试使用反射来改变常量,那么行为会有所不同.(只是不要这样做......)
| 归档时间: |
|
| 查看次数: |
2157 次 |
| 最近记录: |