开发者社区> 问答> 正文

java变量的初始化和属性的默认值

java变量的初始化和属性的默认值问题。为什么local variables 使用时要赋初值,而global variables 系统默认初值?

展开
收起
蛮大人123 2016-03-13 16:27:14 5409 0
2 条回答
写回答
取消 提交回答
  • 我是一只会coding的小白熊

    "成员变量是对象的一个属性,是随着对象的创建而分配空间,并经过JVM初始化" 貌似不太对啊。

    public class A {
        String ss;
    }
    
    public void static main() {
        A a = new A();
        a.ss;  //这里是个null,jvm可没有为ss分配任何内存空间哦
    }

    这个人的问题就有问题,不论是全局变量还是局部变量,都是需要初始化的。你可以不初始化,对于一个没有初始化的non-primitive类型变量来说,它的默认值是null;而对于一个primitive类型的变量来说,采用其默认值,比如int型的就是0,boolean型的就是false。

    我可能对问题理解的不透彻,还请指教。

    2019-07-17 19:02:50
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    首先要知道,局部变量一般分配在栈上面(值不一定分配在栈上面,比如引用类型的可能是分配在堆上面,也可能分配在常量区),而对象是分配在堆上面的。
    java是面向对象的语言,对象一般分配在堆上面,成员变量是对象的一个属性,是随着对象的创建而分配空间,并经过JVM初始化,那么为什么jvm会为堆上的对象的属性初始化呢,试想一下,现实世界中,一般一个人有胳膊有腿,到了JVM里面,你new出一个人来,结果缺胳膊少腿的,肯定不行。所以JVM会为成员变量进行初始化,完了在运行时,你还可以去改变。
    那么局部变量为什么不会初始化呢?声明一个局部变量 Person person变量,为什么一定要初始化才能用呢?JVM为什么不先帮我初始化一下呢?我估摸着JVM是考虑资源的问题,因为大家在使用局部变量的时候,一般想这个局部变量来存储我们想要储存的值,一般不会拿null之类的来做业务逻辑处理吧。所以JVM认为你应该自己指定一个值,然后来使用它。所以他就不帮我们初始化局部变量了,如果他初始化了局部变量,但通常又不是我们想要的,在局部变量为引用类型的时候,值是分配在堆上面或常量区里面,初始化了就占了内存,你又不用,JVM一时半会儿也不回收,不是浪费资源么?

    2019-07-17 19:02:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载