我的问题很简单。如果我在java中有像堆栈这样的数据结构并添加一些元素,那么我创建其他堆栈并使用=运算符(示例1)等于第一个堆栈,而不是使用while循环清空第一个堆栈(示例2)。如果我尝试在其他范围内使用第二个堆栈,如果第一个堆栈为空,我可以丢失数据吗?
Stack<String> stack=new Stack<>();
Stack<String> stack_aux=new Stack<>();
stack.push("Hola");
stack.push("Mundo");
stack.push("in Java");
示例1
stack_aux=stack;
示例2
while(!stack.isEmpty()){
stack_aux.push(stack.pop());
}
答案 0 :(得分:1)
要将stack
复制到另一个stack
,您需要执行以下操作:
stack_aux.addAll(stack);
您不能只在示例1中使用=
您的示例2将正常工作。
修改强>
实际上更好的方法是使用clone()
方法:
stack_aux = (Stack<String>) stack.clone();
答案 1 :(得分:1)
当我们采访新的Java程序员时,这是我们提出的基本问题之一。
What is the difference between =, ==, and equals() in Java?
其他一些SO帖子for example this已经回答了部分问题。未明确涵盖的Java基础之一是Java中的=符号是赋值运算符。也就是说,当你说
时stack_aux=stack;
您正在将堆栈的值分配给变量stack_aux。
执行此操作时,如果您没有在其他变量中保留它的副本,则stack_aux的值将会丢失。无论堆栈是否为空,都会发生这种情况。
执行此操作时:
while(!stack.isEmpty()){
stack_aux.push(stack.pop());
}
当stack不为空时,您将在stack_aux之上推送堆栈的值。