Foreach 循環中的神秘賦值:為什麼它不影響底層資料
考慮下面令人困惑的程式碼片段:
String boss = "boss"; char[] array = boss.toCharArray(); for(char c : array) { if (c== 'o') c = 'a'; } System.out.println(new String(array)); //Why does this print "boss" and not "bass"?
考慮下面令人困惑的程式碼片段:
儘管看似對迭代變數 c進行了賦值,但輸出仍然存在“老闆”而不是預期的“低音”。為了解開這個謎團,我們深入研究 foreach 迴圈的細微差別。
迭代變數:純粹的代理
使用 foreach 迴圈迭代集合時,迭代變數(在本例中為 c)僅表示元素的副本。本質上,它在訪問底層集合時充當臨時佔位符。
修改佔位符與更改集合
for (int i = 0; i < array.length; i++) { char c = array[i]; if (c == 'o') { c = 'a'; } }
對迭代變數的賦值僅影響副本而不是原始集合。這相當於:
雖然本地修改了c的值,但原始數組保持不變。
真實變化的強制修改
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
要真正修改底層集合,直接存取數組元素是必要:
此程式碼明確更改數組的各個元素,從而產生所需的“低音”輸出。
結論
了解 foreach 迴圈中迭代變數的真實性質對於避免混淆和確保有效的資料操作至關重要。透過對數組元素而不是迭代變數進行賦值,開發人員可以根據自己的預期需求自信地修改底層集合。以上是為什麼修改 Foreach 迴圈的迭代變數不會更改底層數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!