2 weixin 29245719 weixin_29245719 于 2015.07.06 16:03 提问

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

java变量的初始化和属性的默认值问题。
为什么local variables 使用时要赋初值,而global variables 系统默认初值?(我这样理解对吗?本人小白,求各路大神指点!)

4个回答

bdmh
bdmh   Ds   Rxr 2015.07.06 16:07

对于类成员,会自动附初值,对于方法内部变量,不会,你最好给一下值

u012216727
u012216727   Ds   Rxr 2015.07.06 16:25

这个你用时手动给一下值就是了,也没有那么麻烦吧。

miracle_yao
miracle_yao   2015.07.06 17:01

对于成员变量,都有对应的默认值,而对于局部变量,在使用前必须先赋值,你可以自己写代码验证下。

lingfeiwen
lingfeiwen   2015.07.06 18:22

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

个人的理解,不一定完全正确。大牛也来说说吧。

Csdn user default icon
上传中...
上传图片
插入图片