有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    Java没有按引用传递。它总是传递值。当您将例如oddHead变量传递给oddEvenSplitter()方法时,实际发生的情况是传递oddHead变量的副本,从该点开始headoddHead变量将是两个独立的变量,指向堆中的同一对象。因此,如果将新值指定给方法中的head变量,则另一个(oddHead)将保持不变。对于所有其他传递的参数也是如此

    作为解决方案,您可以创建另一个对象(如DTO),并将所有需要的引用放入其中,然后将其传递给您的方法。然后,无论何时更改这些引用,都可以在调用者方法中获取它们