在Java的语法中要求局部变量一定要先赋初值才能用,而成员变量却不需要,我一直很不解这个问题,为什么要这样设计呢?请大家帮我解答一下

解决方案 »

  1.   

    呵呵,你理解错了,成员变量其实也赋值了,只是初始化都为0或者null了,明白了?
      

  2.   

    这个我明白,只是不明白为什么Java设计的时候也不给局部变量赋初值呢?
    我想知道在内存中成员变量和局部变量是怎么变化的
      

  3.   

    用过啊,C里面是auto,不确定的
    是不是Java设计的时候就是为了避免出现这种意外的错误的啊
      

  4.   

    嗯,Java中的类的static变量相当于C语言里的全局(extern或者static)变量,放在全局数据区,被操作系统初始化成全0;而因为对象都由new操作生成,所以对象的成员变量放置在(相当于)C中由calloc分配的堆空间中,calloc将其全部初始化为0。而局部变量放置在栈中,栈空间是经常被复用的,比如先调用A函数:A()等A执行完了之后会释放所用的栈空间,然后调用B函数:B(),B函数占用的栈空间就会是原来A占用的那片空间,而那片空间是A函数读写了很多次的。如果想要局部变量默认初始化为0的话,就必须要么一个函数申请栈空间后就将其memset成0,要么函数释放栈空间时将其memset成0,无论是什么情况,都会增加不必要的开销。所以干脆就放任局部变量的值未定义了……
      

  5.   

    A()等A执行完了之后会释放所用的栈空间,然后调用B函数:B(),B函数占用的栈空间就会是原来A占用的那片空间
    ?????????????  困惑ing
      

  6.   

    好比你已经有好几本书堆叠在一起,这就相当于一个栈,这时候你拿了一本 The C Programming Language 摞在了最上面,过了一会了你把它拿开,然后再拿了一本 C A Reference Manual 放在了最上面——这个时候,这本书的位置和刚才那本书的位置在空间上就是重叠的……
      

  7.   

    JAVA和C是两种不同的语言,不要带着C的思想学习JAVA
      

  8.   

    局部变量通常你自己都会给它去赋值的,因为你的代码告诉你,你需要去给它赋值才能达到你的要求;成员变量如果你一开始定义了,你怎么给它赋值?我想也没多少人能一开始就能肯定自己用到什么值吧。
    所以java就只对成员变量默认初始化了,
    在局部变量里,你定义了量就一定要用到它(那么赋值就少不了),如果你忘了赋值,那么就出错了,方便提醒你,而且你写的程序大了,局部变量多了,找问题就有点麻烦了。
    而对于这个问题,成员变量就不会有多少了。