Java中的链表引用



如果我有一个ListNode class,它是

public class ListNode{
  int data;
  ListNode nextNode;
}

和一个List类,它是

public class List{
  private ListNode firstNode;
  private ListNode lastNode;
  private String name;
public List(String listName){
  name = listName;
  firstNode = lastNode = null; 
  }
}

最后一个语句"firstNode = lastNode = null"是什么意思?是否firstNode。data = null或firstNode。nextNode = null?

编辑:看来我回答错问题了。正如下面评论中提到的OP:

对不起,我的问题可能不够清楚,我真正困惑的是,当执行"firstNode = null"时,是否firstNode。data = null或firstNode。nextNode = null,因为firstNode是ListNode类型的对象,它有int数据和ListNode类型的实例。

赋值firstNode = null后,不存在.data.nextNode。您必须首先将firstNode分配给new ListNode()

一旦你这样做,它的data成员将被初始化为0, nextNode成员将被初始化为null,因为如果没有显式初始化,这些是成员字段的默认初始值。但是,同样,您需要实例化ListNode并首先将其分配给firstNode,否则如果您尝试在null时访问它,您将获得NullPointerException


原始答案,re: firstNode = lastNode = null

firstNodelastNode同时赋值给null

这是一种常用的语法技巧,它利用了这样一个事实,即赋值表达式作为一个整体计算为赋值后的变量的值:

    a = b = 1   
=>  a = (b = 1)            (b = 1) assigns b then evaluates to 1
=>  a = 1

只要类型是兼容的,你可以将任意多个链接在一起:

    a = b = c = d = 1
=>  a = b = c = (d = 1)    (d = 1) assigns d then evaluates to 1
=>  a = b = (c = 1)        (c = 1) assigns c then evaluates to 1
=>  a = (b = 1)            (b = 1) assigns b then evaluates to 1
=>  a = 1

不兼容的类型将导致错误:

Integer x;
Double y;
x = y = null; // error: cannot convert from Double to Integer

这和你做以下事情时使用的技巧是一样的:

int ch;
while ((ch = input.read()) != -1) {
   ...
}

From JLS 15.26:

在运行时,赋值表达式的结果是赋值发生后变量的值。

这是空LinkedList的"起始逻辑"当您实例化类型为List的对象时,它最初是空的,因此没有firstNode也没有lastNode,因此它们都是null

相关内容

  • 没有找到相关文章

最新更新