LinkedBlockingQueue#enqueue() 方法中的语句是什么意思?


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.nextnode.next完全相同(很可能为 null,如您的情况所示(。

最新更新