Java - 为什么 Java 中全局变量不一定初始化,局部变量必须初始化?

Posted 程序员牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 为什么 Java 中全局变量不一定初始化,局部变量必须初始化?相关的知识,希望对你有一定的参考价值。

  1. 首先 Java 语言就是这么规定的。
  2. 然后为什么 Java 语言要这么规定呢?有什么内部机理吗?

可能的原因如下,当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据。而成员变量就是类的数据,也是放在这块内存区域中的。只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成初始化,方便快捷。

而对于方法的局部变量,是在线程的Stack中,当然Stack他也可以帮我们初始化,不过有一个问题。对于有些局部变量,在方法的一开始是没有的,有些在循环中的局部变量是要反复的声明多次的。有些局部变量作用域结束后,另一个局部变量又会占用这个局部变量的位置。

那么初始化要放在何时呢?当然JVM可以帮我们初始化多次,不过那样或许会带来性能问题。

for (int i = 0; i < 10; i++) {
    int n;
    if (i % 2 == 0) {
        n = 10;
    } else {
        n = 20;
    }
}

像是这个n,我们完全不用JVM帮我们初始化,如果每次循环他都帮我们初始化一次,那么是没有必要的。综上所述,对于局部变量,可能不帮我们初始化是一个不错的选择。(而且JVM实现起来也更容易!!!)

以上是关于Java - 为什么 Java 中全局变量不一定初始化,局部变量必须初始化?的主要内容,如果未能解决你的问题,请参考以下文章

Java 中 cache 和 全局静态变量的 区别 优点缺点,希望不要全拷贝的答案。

为啥lua语言中使用全局变量就会造成内存泄漏

为什么java没有全局变量

Java网络爬虫初体验

java 局部静态变量在多线程环境下是不是有线程安全问题??

java的全局变量都有哪些作用?