【发布时间】:2011-04-19 14:45:51
【问题描述】:
我最近遇到了一个声明了以下字段的类:
private final int period = 1000;
在这个特殊的例子中,作者打算让它也是静态的,因为值不能在任何时候改变,没有真正的函数理由不将它声明为静态,但这让我想知道 Java 是如何处理最终与最终静态原语。
特别是:
1) 最终的静态原语如何存储?它们是否只是直接编译成使用它们的表达式?
2) 如果它们实际上被分配了存储,那么包含类的每个实例是否都必须维护对该位置的引用? (在这种情况下,对于小于 4 字节的原语,类的每个实例实际上都会比直接包含原语时更大,就像在非静态情况下一样)
3) 编译器现在是否足够聪明,可以确定在上述情况下,变量是“有效静态的”,因为不可能让不同的实例包含不同的值,因此与最终的静态变量类似地对其进行优化?
【问题讨论】: