如何在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。
答案 0 :(得分:0)
当您指定c2 = c1;
时,c1
和c2
都指的是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());
}
}