如何在java中恢复对象的引用。在下面的代码中,我已将c1分配给c2。如何将具有(50,30)值的对象恢复回c2

时间:2017-05-29 10:55:11

标签: java

如何在java中恢复对象的引用。在下面的代码我有 分配c1到c2。如何将具有(50,30)值的对象恢复为c2

public class MyClass
{
public int a;
public int b;

public MyClass(int first, int second) // constructor
{
    this.a = first;
    this.b = second;
}

public static void main(String args[])
{
    MyClass c1 = new MyClass(10, 20); // creating objects
    MyClass c2 = new MyClass(50, 30);

    c2 = c1;
    System.out.println(c2.a); // printing variable a of c2
}
}

输出: 10 如何将对象(50,30)的引用恢复为c2。

3 个答案:

答案 0 :(得分:0)

当您指定c2 = c1;时,c1c2都指的是new MyClass(10, 20);个对象。

new MyClass(50, 30);仍然是记忆(RAM),但没有提及它(它在太空中自由移动)。

现在你无法取回它,因为它已经在太空中丢失了。

答案 1 :(得分:0)

无法取回旧的价值。事实上,当您将c1分配给c2时,您只需将旧参考文件扔掉并将新参考文件设置为c1。

答案 2 :(得分:0)

而不是:实际更改c2引用的c2 = c1;稍微改进了类,以便存储/恢复最后一个值,可以使用Java Stack类实现LIFO结构。

实施例

public class MyClass {
    private int a;
    private int b;
    private Stack<MyClass> myx;

    public MyClass(int first, int second) {
        a = first;
        b = second;
        myx = new Stack<>();
        myx.add(this);
    }

    @Override
    public String toString() {
        return "a=" + myx.peek().a + ", b=" + myx.peek().b;
    }

    public static void move(MyClass l, MyClass r) {
        l.myx.push(r);
    }

    private void restore() {
        if (myx.size() > 1) {
            myx.pop();
        }
    }

    public static void main(String args[]) {
        MyClass c1 = new MyClass(10, 20);
        MyClass c2 = new MyClass(-50, -30);
        MyClass c3 = new MyClass(-77, -77);
        MyClass.move(c2, c1);
        MyClass.move(c2, c3);
        System.out.println("c2: " + c2.toString());
        c2.restore();
        System.out.println("c2: " + c2.toString());
        c2.restore();
        c2.restore();
        c2.restore();
        System.out.println("c2: " + c2.toString());
    }

}