Java中的棧是一種數(shù)據(jù)結(jié)構(gòu),用于在程序運(yùn)行時(shí)存儲(chǔ)臨時(shí)變量和方法調(diào)用。棧遵循“先入后出”的原則,最新的數(shù)據(jù)存儲(chǔ)在棧的頂部。
/** * 計(jì)算階乘 * @param n * @return */ public static int factorial(int n) { if (n == 0) { return 1; } return n * factorial(n - 1); }
在上述代碼中,每次遞歸調(diào)用factorial方法時(shí),都會(huì)將當(dāng)前調(diào)用堆棧的狀態(tài)存儲(chǔ)在棧中。當(dāng)遞歸結(jié)束返回到最初的方法調(diào)用時(shí),棧頂?shù)臄?shù)據(jù)也會(huì)被彈出。
除了棧外,Java中還有堆內(nèi)存,用于存儲(chǔ)動(dòng)態(tài)對(duì)象和實(shí)例變量。堆內(nèi)存遵循垃圾收集機(jī)制,會(huì)自動(dòng)回收不再被使用的對(duì)象。
public static void main(String[] args) { String hello = "Hello"; String world = "World"; String greeting = hello + " " + world; System.out.println(greeting); }
在上述代碼中,字符串"Hello"和"World"分配在堆內(nèi)存中,而變量greeting分配在棧內(nèi)存中。當(dāng)通過+操作符合并字符串時(shí),Java會(huì)在堆內(nèi)存中新建一個(gè)字符串對(duì)象,內(nèi)容為"Hello World"。最后將greeting變量指向這個(gè)新對(duì)象。