在JAVA世界中,字段变量如果不初始化就会有默认值,而局部变量则没有。
我想了很多,查了很多,但还是不明白。为什么JAVA世界要这样设计?顺便说一句,我认为这与堆和堆栈有关。
最佳答案
当您可以确定代码路径时,可以更轻松地检查局部变量是否始终在相对有限的范围内初始化。它并不总是正确,但除非代码令人困惑,否则它会做得很好。
final
字段也必须初始化,尽管只初始化一次。当一个构造函数调用另一个构造函数时,它可能会感到困惑。
对于非最终字段,很难确保字段在用于所有可能的代码路径之前已初始化。例如如果这些调用是从将来可能会更改的另一个类进行的,那么如何确保 setter
始终在 getter
之前调用。
相反,JVM 保留默认值并让您担心这个问题。
关于JAVA默认值设计原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38634826/