[英]Passing by reference vs Passing by value
我目前正在學習《破解編碼》采訪,我相信我對指針的基本理解受到質疑。 我目前正在尋找一種為二叉樹的每個級別制作一個鏈表的解決方案。 解決方法如下:
void createLevelLinkedList(TreeNode root, ArrayList<LinkedList<TreeNode» lists, int level) {
if (root == null) return; // base case
LinkedList<TreeNode> list = null;
if (lists.size() == level) { // Level not contained in list
list = new LinkedList<TreeNode>();
/* Levels are always traversed in order. So., if this is the
* first time we've visited level i, we must have seen levels
* 0 through i - 1. We can therefore safely add the level at
* the end. */
lists.add(list);
} else {
list = lists.get(level);
}
list.add(root);
createLevelLinkedList(root.left, lists, level + 1);
createLevelLinkedList(root.right, lists, level + 1);
}
ArrayList<LinkedList<TreeNode» createLevelLinkedList(TreeNode root) {
ArrayList<LinkedList<TreeNode» lists = new ArrayList<LinkedList<TreeNode»();
createLevelLinkedList(root, lists, 0);
return lists;
}
該解決方案使我感到非常困惑,因為在僅具有根參數(驅動程序函數)的createLeveLinkedList函數中,將創建一個新的鏈表列表。 從Java的角度來看,如果按值傳遞它,則在調用createLevelLinkedLists(root,list,0)后,據我所知,列表應該沒有改變。
如果是C ++,如果他們將lists對象的指針傳遞給函數,則我可以理解。
有人可以澄清一下嗎?
抱歉的格式,我仍然不確定它如何在stackoverflow上工作。
謝謝
Java總是按值傳遞。 然而通過對復雜數據類型的值是基准,所以lists
參考送入createLevelLinkedList(...)
是指相同的對象的原始lists
參考。
只要您不更改createLevelLinkedList(...)
方法中引用的值,就可以更改原始對象。
正如Paul所提到的,所有內容都記錄在這里:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.