LinkedBlockingQueue blockedQueue = new LinkedBlockingQueue();
blockedQueue.offer(1);
然后转到 LinkedBlockingQueue#enqueue((;
before enter enqueue(), "blockedQueue.offer(1);" I got a Node@xxx998(1) from Node node = new Node(1),
private void enqueue(Node<E> node) {
// assert putLock.isHeldByCurrentThread();
// assert last.next == null;
last = last.next = node;
}
然后程序运行
"last = last.next = node;", and I got :
last = Object@xxx998(1),
last.next = null,
node = Node@xxx998(1).
那么我不知道为什么该语句会像那样工作答案,尤其是我不知道为什么"last.next=null"。
我在互联网上搜索了大约一个小时,没有找到关于"a=b=c"语句语法的东西,我找到了一些"a=b=c=0",但这些对我的情况毫无用处。
因此,请考虑此操作的作用:
last = last.next = node
来自 Java 教程:
除赋值运算符外的所有二元运算符都从左到右计算;赋值运算符从右到左计算。
因此,我们将其应用于您的等式,我们得到以下步骤:
last = last.next = node
[2] [1]
贯穿其中:
1:
last = last.next = node
[node]
阿拉伯数字:
last = last.next = node
[node] [?]
请注意,这些操作都没有修改node
本身。 因此,当您将last
设置为node
时,它现在引用与node
相同的未触及对象,因此,last.next
与node.next
完全相同(很可能为 null,如您的情况所示(。