Java:对象分配
我想在java中,当您执行Java:对象分配,java,object,reference,Java,Object,Reference,我想在java中,当您执行object1=object2时,您会将object2的引用复制到object1,因此object1和object2指向同一个对象。对吗 我编写了一个函数对堆栈进行排序 import java.util.Stack; public class sortStack { public static void main(String[] str) { Stack<Integer> s = new Stack<Integer>
object1=object2
时,您会将object2
的引用复制到object1
,因此object1
和object2
指向同一个对象。对吗
我编写了一个函数对堆栈进行排序
import java.util.Stack;
public class sortStack {
public static void main(String[] str) {
Stack<Integer> s = new Stack<Integer>();
s.push(2);
s.push(21);
s.push(43);
s.push(3);
s.push(87);
s.push(2);
s.push(12);
s.push(10);
s.push(25);
sortStack(s);
while (!s.isEmpty()) {
System.out.print(s.pop() + " ");
}
}
public static void sortStack(Stack<Integer> src) {
Stack<Integer> dst = new Stack<Integer>();
Stack<Integer> buf = new Stack<Integer>();//buffer
while (!src.isEmpty()) {
int v = src.pop();
if (dst.isEmpty()) {
dst.push(v);
}
while (!dst.isEmpty() && dst.peek() > v) {
buf.push(dst.pop());
}
dst.push(v);
while (!buf.isEmpty()) {
dst.push(buf.pop());
}
}
src = dst;
//Print:
//while(!src.isEmpty()){
// System.out.print(src.pop()+" ");
//}
}
}
import java.util.Stack;
公共级索茨塔克{
公共静态void main(字符串[]str){
堆栈s=新堆栈();
s、 推(2);
s、 推(21);
s、 推(43);
s、 推(3);
s、 推(87);
s、 推(2);
s、 推(12);
s、 推(10);
s、 推(25);
索茨塔克(s);;
而(!s.isEmpty()){
System.out.print(s.pop()+“”);
}
}
公共静态void sortStack(堆栈src){
堆栈dst=新堆栈();
Stack buf=new Stack();//缓冲区
而(!src.isEmpty()){
int v=src.pop();
if(dst.isEmpty()){
dst.推力(v);
}
而(!dst.isEmpty()&&dst.peek()>v){
buf.push(dst.pop());
}
dst.推力(v);
而(!buf.isEmpty()){
dst.push(buf.pop());
}
}
src=dst;
//打印:
//而(!src.isEmpty()){
//System.out.print(src.pop()+);
//}
}
}
我无法从类中获得任何输出。如果我取消对打印部分的注释,则可以。
我不明白调用函数后,s
堆栈是空的。我已经将dst
分配给了s,所以s应该指向dst
堆栈,对吗
请帮助!谢谢!您正在为参数src分配一个引用,它实际上是一个局部变量,因此您没有看到对原始堆栈变量s的任何影响。相反,让方法返回dst并分配返回的对象。即
public static Stack<Integer> sortStack(Stack<Integer> src) {
// ....
return dst;
}
当您设置
src=dst
时,您只会覆盖方法中引用的本地副本。在调用方法的过程中,每个参数都有本地副本,这样在方法中,通过其方法修改src将在方法之外产生效果,但将src分配给新引用(如dst)则不会
如果在
sortStack
中返回dst
,并在调用函数中放入s=sortStack
,代码将正常工作。堆栈通常用于FILO操作(先进先出)。为什么不使用简单的可排序集合,如ArrayList
?相关:Java不是按引用传递的。它是严格按值传递的,只有一些值恰好是对象引用。@MenoHochschild问题不允许使用ArrayList。这就像面试问题一样。
s = sortStack(s);