初始化多个引用Java



我的链表类如下:

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;
}

这就是完整的方法。编译器错误为:

./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;

最新更新