JAVA中for與while關於記憶體的細節問題

  • 2019 年 10 月 5 日
  • 筆記

文/朱季謙

JAVA的程式結構有順序結構,循環結構,分支結構,以及跳轉結構,而循環結構里經常用到的無外乎有以下幾種:for循環,while循環,以及do-while循環。本文主要討論for循環與while循環的區別,其實,兩者在日常編程過程里,都是可以互換的,唯一有區別的在於格式上,若需要通過變數來進行循環控制,而用到的變數只作為循環增量存在時,兩者就會在記憶體上出現了差異。

在用while來做循環時,需要用到變數進行循環控制時,往往會定義一個成員變數,例如截圖裡的i,它的值會存在堆記憶體里,會隨著類的存在而一直存在,即使循環結束了,也不會自動釋放,只有當類結束了才會消失,換言之,即會佔用記憶體。

而用for循環時,若需用到變數進行循環控制時,往往會定義一個局部變數,類似以下截圖所示:

這裡的變數j屬於局部變數,定義的值存放在棧記憶體里,當循環結束後,它會自動釋放j的值,即不會繼續佔用空間。

由此可知,for循環與while循環雖然兩者都可以互換,但在細節方面上,其實還存在是否佔用記憶體的問題,相對於while,for在需用到變數進行循環控制時,for比較少佔用空間。關於空間佔用問題,其實也需要關注才行,畢竟涉及到程式優化問題。