Java:对象分配

标签 java object reference

我在java中,当你执行object1=object2时,你会将object2的引用复制到object1,所以 object1object2 指向同一个对象。对吗?

我编写了一个函数来对堆栈进行排序。

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()+" ");
        //}
    }
}

我无法从类(class)中获得任何输出。如果我取消注释打印部分,它就很好。 我不明白调用该函数后 s 堆栈为空。我已经将 dst 分配给 s,所以 s 应该指向 dst 堆栈,对吗?

请帮忙!谢谢!

最佳答案

您正在分配对参数 src 的引用,该参数实际上是一个局部变量,因此您看不到对原始 Stack 变量 s 的任何影响。相反,让方法返回 dst 并分配返回的对象。即,

public static Stack<Integer> sortStack(Stack<Integer> src) {
    // ....

   return dst;
}

s = sortStack(s);

关于Java:对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20930676/

相关文章:

java - 字符串比较

javascript - JS 对象事件

java - 在Java中从该类的主体内部实例化对象

c++ - 将变量赋值给函数内部的引用。

Java:打印出最后一个引用变量

java - Hibernate cfg.xml - 无法建立 jdbc 连接

java - void 方法的模拟参数

java - 为什么我们应该在 WSDL 中有 SOAP 位置?

Java动态绑定(bind)和方法重写过程

java - hashmap自定义类键&&对象保存/加载