多个引用的初始化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) { ... }
这是允许的,因为 ForUpdate
是 StatementExpression
的列表(分配是 SE)。
也可以做t1 = t2 = h1;
,先把h1
的值赋给t2
,再把t2
的值赋给t1
.
我应该说的,更准确地说,你不能在单个语句中使用多个语句表达式(除了在基本 for 语句中的 ForInit
中),用逗号分隔。您必须使用的分隔符是 ;
,将其分成两个语句。
你不能在一行中使用多个赋值语句,如果你想在它们之间使用分号分隔。
在下一行 ListNode t1=h1,t2=h2;
写成如下t1=h1; t2=h2;
我的链表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) { ... }
这是允许的,因为 ForUpdate
是 StatementExpression
的列表(分配是 SE)。
也可以做t1 = t2 = h1;
,先把h1
的值赋给t2
,再把t2
的值赋给t1
.
我应该说的,更准确地说,你不能在单个语句中使用多个语句表达式(除了在基本 for 语句中的 ForInit
中),用逗号分隔。您必须使用的分隔符是 ;
,将其分成两个语句。
你不能在一行中使用多个赋值语句,如果你想在它们之间使用分号分隔。 在下一行 ListNode t1=h1,t2=h2;
写成如下t1=h1; t2=h2;