Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多引用Java的初始化_Java_Pointers_Pass By Reference - Fatal编程技术网

多引用Java的初始化

多引用Java的初始化,java,pointers,pass-by-reference,Java,Pointers,Pass By Reference,我的链表类如下所示: 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; 这给编译器带来了错误,这让我感到

我的链表类如下所示:

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++一种,方法将接受<代码> ListNoad *H1和ListNoad *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;
在这条线上:

ListNode t1=h1,t2=h2;
t1=h1,t2=h2;
您可以在一个声明中声明多个变量,但不能在一个语句(*)中执行多个赋值。就像上面说的:你需要一个

t1=h1; t2=h2;

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

for (;; t1 = h1, t2 = h2) { ... }
这是允许的,因为
for update
是一个
语句表达式的列表(赋值为SE)

你也可以做
t1=t2=h1
,它首先将
h1
的值分配给
t2
,然后将
t2
的值分配给
t1


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

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


如下所示,t1=h1;t2=h2

请显示编译器错误,给我们一个提示。您在这里显示的内容应该是(/可能是)好的。@AndyTurner我现在已经更新了错误在下面的
diff=(len1>len2)?len2-len1:len1-len2,替换为t1=h1,t2=h2通过
t1=h1;t2=h2。我们不能在一条语句中完成多个赋值?我在哪里可以找到这个,我已经在谷歌上搜索并阅读了文档,但我在任何地方都找不到。在一种明确记录的语言中,你找不到大多数不能完成的事情:要列举的事情实在太多了。如果你真的愿意,你可以根据语法来确定。正如你在接受的答案中所看到的,你不能在一行中完成多个作业。但是您可以声明几个变量并为它们赋值。所以ListNodeT1=h1,t2=h2;完全没问题