java - 多个引用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) { ... }
这是允许的,因为它ForUpdate
是 s 的列表StatementExpression
(分配是 SE)。
您也可以这样做t1 = t2 = h1;
,首先将h1
to的值赋值t2
,然后将t2
to的值赋值t1
。
更准确地说,我应该说的是,您不能在ForInit
用逗号分隔的单个语句中使用多个语句表达式(除了在基本 for 语句中)。您必须使用的分隔符是;
,将其分为两个语句。
推荐阅读
- excel - VBA 宏 - 打开工作簿,设置活动,删除列
- ansible - Ansible:Blockinfile 对它可以创建的文件大小有限制吗?
- javascript - Swiper js幻灯片计数器
- python - 为数据类型集成异常处理
- reactjs - 为什么使用 render-props 而不是仅仅将组件作为 prop 传递?
- swift - EmitterCells 未显示在 CAEmitterLayer 中
- javascript - 用逗号格式化数字
- python - 在跨多个设备使用的应用程序上使用 python 密钥环
- c++ - C++ 中的扩展内联汇编:被破坏的寄存器到底是什么?
- javascript - 使用 ReactJS 钩子,一旦选择了复选框过滤器,你应该如何调用你的 api?