此代码片段如何交换队列内容 (Java)?
How is this code snippet swapping Queue contents (Java)?
这是我写的代码:
public static void main(String[] args) {
// Why is this snippet actually swapping?
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();
q1.add(10); q1.add(20); q1.add(30);
q2.add(11); q2.add(22); q2.add(33);
System.out.println("q1 before name swap --> " + q1);
System.out.println("q2 before name swap --> " + q2);
Queue<Integer> temp = q1;
q1 = q2;
q2 = temp;
System.out.println("q1 after name swap --> " + q1);
System.out.println("q2 after name swap --> " + q2);
}
这是我得到的输出:
q1 before name swap --> [10, 20, 30]
q2 before name swap --> [11, 22, 33]
q1 after name swap --> [11, 22, 33]
q2 after name swap --> [10, 20, 30]
即使考虑了很长时间,我似乎还是不明白为什么这段代码实际上交换了队列。 temp 不应该也存储 q2 内容吗,正如我写的 temp = q1
然后 q1 = q2
?也就是说,不应该对 q1 的更改也反映在 temp 上,因为 Queue 是 Java 中的 non-primitive/reference 数据类型?
队列确实是非原始或引用数据类型。
示例中有 3 个队列(q1、q2 和临时)。
您执行以下操作
- 您将 q1 分配给 [10, 20, 30],将 q2 分配给 [11, 22, 33]。 q1 和 q2 的值存储在内存中。
- 然后您将 temp 分配给 q1,temp 值现在是 [10, 20, 30]。此时如果你修改temp或q1,那么它们都会改变。
- 然后将 q1 分配给 q2,q1 开始指向 q2 的引用,现在 q1 的值为 [11, 22, 33]
- 然后将 q2 分配给 temp,q2 开始指向 temp 的引用,现在 q2 值为 [10, 20, 30]
您基本上是在使用 q1=q2 和 q2=temp 而不是值来更改引用。
希望这对您有所帮助。
这是我写的代码:
public static void main(String[] args) {
// Why is this snippet actually swapping?
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();
q1.add(10); q1.add(20); q1.add(30);
q2.add(11); q2.add(22); q2.add(33);
System.out.println("q1 before name swap --> " + q1);
System.out.println("q2 before name swap --> " + q2);
Queue<Integer> temp = q1;
q1 = q2;
q2 = temp;
System.out.println("q1 after name swap --> " + q1);
System.out.println("q2 after name swap --> " + q2);
}
这是我得到的输出:
q1 before name swap --> [10, 20, 30]
q2 before name swap --> [11, 22, 33]
q1 after name swap --> [11, 22, 33]
q2 after name swap --> [10, 20, 30]
即使考虑了很长时间,我似乎还是不明白为什么这段代码实际上交换了队列。 temp 不应该也存储 q2 内容吗,正如我写的 temp = q1
然后 q1 = q2
?也就是说,不应该对 q1 的更改也反映在 temp 上,因为 Queue 是 Java 中的 non-primitive/reference 数据类型?
队列确实是非原始或引用数据类型。
示例中有 3 个队列(q1、q2 和临时)。
您执行以下操作
- 您将 q1 分配给 [10, 20, 30],将 q2 分配给 [11, 22, 33]。 q1 和 q2 的值存储在内存中。
- 然后您将 temp 分配给 q1,temp 值现在是 [10, 20, 30]。此时如果你修改temp或q1,那么它们都会改变。
- 然后将 q1 分配给 q2,q1 开始指向 q2 的引用,现在 q1 的值为 [11, 22, 33]
- 然后将 q2 分配给 temp,q2 开始指向 temp 的引用,现在 q2 值为 [10, 20, 30]
您基本上是在使用 q1=q2 和 q2=temp 而不是值来更改引用。
希望这对您有所帮助。