java如何在输入参数是引用的情况下重用代码?
此代码将转换linkedlist,如:1->;2->;3->;4分为1->;3-2->;4(即左侧奇数,右侧偶数),由oddEvenSplitter
函数引起的问题除外。此代码将按值修改引用。在输入是引用的情况下,如何重用代码
public void oddEvenSplitter (Node head, Node current, Node temp) {
if (head == null) {
head = temp;
current = temp;
} else {
current.next = temp;
current = temp;
}
}
public void oddFirst( ) {
if (first == null) {
throw new NoSuchElementException();
}
Node temp = first;
Node oddhead = null;
Node odd = null;
Node evenhead = null;
Node even = null;
while (temp != null) {
if (temp.element % 2 == 0) {
oddEvenSplitter(evenhead, even, temp);
} else {
oddEvenSplitter(oddhead, odd, temp);
}
}
if (oddhead != null) {
odd.next = evenhead;
first = oddhead;
}
}
# 1 楼答案
Java没有按引用传递。它总是传递值。当您将例如
oddHead
变量传递给oddEvenSplitter()
方法时,实际发生的情况是传递oddHead
变量的副本,从该点开始head
和oddHead
变量将是两个独立的变量,指向堆中的同一对象。因此,如果将新值指定给方法中的head
变量,则另一个(oddHead
)将保持不变。对于所有其他传递的参数也是如此作为解决方案,您可以创建另一个对象(如DTO),并将所有需要的引用放入其中,然后将其传递给您的方法。然后,无论何时更改这些引用,都可以在调用者方法中获取它们