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