多个引用的初始化Java

Initialization of multiple references Java

我的链表class如下:

class ListNode {
 public int val;
 public ListNode next;
 ListNode(int x) {
     val = x;
     next = null;
 }
}

现在在具有签名的方法中

public ListNode getIntersectionNode(ListNode h1, ListNode h2)

我有这样的声明:

ListNode t1=h1,t2=h2;

这给出了一个编译器错误,这让我感到困惑,因为在 C++ 中,我可以简单地做:

ListNode *t1=h1,*t2=h2;

(对于 C++ 方法,该方法将接受 ListNode *h1 and ListNode* h2)。 谁能解释为什么我不能在同一条语句中初始化多个引用?

最小可重现示例的更新:

public ListNode getIntersectionNode(ListNode h1, ListNode h2) {
    if (h1 == null || h2 == null)
        return null;
    int len1 = 0, len2 = 0;
    ListNode t1 = h1, t2 = h2;
    while (t1 != null) {
        len1++;
        t1 = t1.next;
    }
    while (t2 != null) {
        len2++;
        t2 = t2.next;
    }
    int diff;
    diff = (len1 > len2) ? len2 - len1 : len1 - len2;
    t1 = h1, t2 = h2;
    if (len1 > len2)
        while (diff--> 0) t1 = t1.next;
    else
        while (diff--> 0) t2 = t2.next;
    ListNode ans = (len1 > len2) ? t1 : t2;
    return ans;
}

完整的 method.The 编译器错误是:

./Solution.java:22: error: ';' expected
        t1=h1,t2=h2;

编译器错误不在这一行:

ListNode t1=h1,t2=h2;

在这条线上:

t1=h1,t2=h2;

您可以在单个声明中声明多个变量,但不能在单个语句中进行多个赋值 (*)。就像它说的:你需要一个 ;:

t1=h1; t2=h2;

(*) 好的,您 可以 在一条语句中进行多项赋值。例如:

for (;; t1 = h1, t2 = h2) { ... }

这是允许的,因为 ForUpdateStatementExpression 的列表(分配是 SE)。

也可以做t1 = t2 = h1;,先把h1的值赋给t2,再把t2的值赋给t1 .

我应该说的,更准确地说,你不能在单个语句中使用多个语句表达式(除了在基本 for 语句中的 ForInit 中),用逗号分隔。您必须使用的分隔符是 ;,将其分成两个语句。

你不能在一行中使用多个赋值语句,如果你想在它们之间使用分号分隔。 在下一行 ListNode t1=h1,t2=h2;

写成如下t1=h1; t2=h2;