如果我有一个ListNode类,这是

public class ListNode{
  int data;
  ListNode nextNode;
}


和一个列表类,这是

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,否则,如果尝试在NullPointerException时访问它,则会得到一个null



原始答案如下: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) {
   ...
}


JLS 15.26


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

关于java - Java中的链接列表引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22586896/

10-09 00:47