【发布时间】:2019-03-09 19:01:55
【问题描述】:
我已阅读有关最终实例变量的其他问答,并且我开始知道非静态最终实例变量是在堆中为类的每个实例创建的但在 java -herbert schildt 的完整参考文献中 据说:
声明为 final 的变量不会在每个实例的基础上占用内存。因此,final 变量本质上是一个常量
哪个是正确的?
【问题讨论】:
-
最终实例变量确实会占用内存。每个实例都可能不同,并且该值必须存储在某个地方。报价中的信息有误。
-
谢谢!书的台词真的错了吗?如果有的话,还有其他方法可以证明它是正确的吗?只是好奇!
-
The book 似乎假设最终变量必须是编译时常量。这似乎是一个错误。它还说“这意味着您必须在声明最终变量时对其进行初始化。”这也不一定是真的,特别是对于可以在构造函数中分配的最终实例变量。
-
如果最终变量在它们的声明中被初始化并且只为它分配一次内存,那么编译器是否可以做出这个假设,因为显然每个创建的实例对于最终变量都有相同的值。是编译器足够聪明来做这种优化?以及在某些版本的java中是否允许?
标签: java class heap-memory final instance-variables