如果我有一个ListNode类,那是
public class ListNode{
int data;
ListNode nextNode;
}
和List Class,即
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?
答案 0 :(得分:4)
编辑:看来我回答错了问题。正如以下评论中提到的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
。
原始回答,重新:firstNode
它将lastNode
和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) {
...
}
这与您执行以下操作时使用的技巧相同:
{{1}}
来自JLS 15.26:
在运行时,赋值表达式的结果是赋值发生后变量的值。
答案 1 :(得分:0)
这是"启动逻辑" for LinkedList
当您实例化List
类型的对象时,它最初为空,因此没有firstNode
而没有lastNode
,因此它们都是{{1} }}