JAVA中for與while關於內存的細節問題

  • 2019 年 10 月 5 日
  • 筆記

文/朱季謙

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

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

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

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

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