現(xiàn)在假如你是java語(yǔ)言的開(kāi)發(fā)者,你已經(jīng)將對(duì)象保存在了堆內(nèi)存中,而將局部變量保存在了棧內(nèi)存中,你會(huì)怎么做呢?
Java 中的變量分為類(lèi)變量,成員變量和局部變量,分別位于 JVM
的方法區(qū)、堆內(nèi)存和棧內(nèi)存中。類(lèi)變量和成員變量都可以在類(lèi)首次加載和類(lèi)初始化時(shí),給出默認(rèn)值,但是局部變量就必須要在使用前賦值。
實(shí)際上,Java 完全可以設(shè)計(jì)成局部變量不需要初始化,只要作者們高興。事實(shí)上,就有這樣的語(yǔ)言,比如 C++。
當(dāng)然,C++不強(qiáng)制必須初始化,不代表就不用初始化,實(shí)際上,C++開(kāi)發(fā)者也都是建議對(duì)局部變量初始化,以防止出現(xiàn)野指針這類(lèi)事情。
其實(shí),不管是局部變量還是成員變量,都是必須要初始化的,那為什么成員變量會(huì)自動(dòng)初始化?其實(shí)正是因?yàn)槌蓡T變量屬于對(duì)象,而對(duì)象是保存在
堆中的,所以jvm就在初始化類(lèi)的時(shí)候把成員變量初始化呢,而如果我們?cè)谡{(diào)用方法的時(shí)候,還要jvm去將局部變量也進(jìn)行初始化,是不是對(duì)會(huì)影響到性能呢?因此,直接強(qiáng)制局部變量必須要初始化反而更好。