实在知乎上看的答案,感觉很好,就转载一下,原文地址:
为什么全局变量无须初始化,局部变量必须初始化?
https://www.zhihu.com/question/30516949
回答一:
- 首先 Java 语言就是这么规定的。
- 然后为什么 Java 语言要这么规定呢?有什么内部机理吗?
而对于方法的局部变量,是在线程的Stack中,当然Stack他也可以帮我们初始化,不过有一个问题。对于有些局部变量,在方法的一开始是没有的,有些在循环中的局部变量是要反复的声明多次的。有些局部变量作用域结束后,另一个局部变量又会占用这个局部变量的位置。
那么初始化要放在何时呢?当然JVM可以帮我们初始化多次,不过那样或许会带来性能问题。
for (int i = 0; i < 10; i++) {
int n;
if (i % 2 == 0) {
n = 10;
} else {
n = 20;
}
}
回答二:
首先明文规定:局部变量是指类方法中的变量,必须初始化。
理由:局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。出于速度和安全性两个方面的综合考虑,解决方案就是虚拟机不初始化,但要求编写者一定要在使用前给变量赋值。
作者:张大大的假货
链接:https://www.zhihu.com/question/30516949/answer/182369229
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。