-1

所以说我有一些像这样的测试java代码:

class A(){
       int a = 0;
       public A{
             a = 1;
       }
 class B(){
       A object = new A(); //Object one
       A object = new A(); //Object two

我的问题是:在 A 类中,当我在对象上调用 new 运算符两次时会发生什么?它会创建一个新对象 A 并销毁旧对象吗?还是会出错?它只是重置旧对象吗?

我已经尝试了几次,并不太了解输出。

4

3 回答 3

4

这是第二个A对象。

第一个将很快被垃圾收集。

请注意,您也可以这样做

new A();
new A();

而不将它们存储在变量中。这是完全有效的,将被执行。

另请注意

A obj1 = new A();
A obj2 = obj1;

不复制对象,它是对同一对象的引用。显然,您也可以有 0 个引用。

于 2013-03-02T00:00:47.650 回答
2

我不相信这会编译。

但是如果问题是当我两次调用构造函数时会发生什么,答案是你得到了这个类的两个实例:

class A {
    int a = 0;

    public A(int input) {
        a = input;
    }
}

class B {
    A object1 = new A(1); //Object one
    A object2 = new A(2); //Object two
    A object3 = object2;
    //object1 != object2

    public B(){
        A a = new A(3);
        a = new A(4); // a points at the last A defined

        System.out.println(object1.a); //prints 1
        System.out.println(object2.a); //prints 2
        System.out.println(object3.a); //prints 2
        System.out.println(a.a); //prints 4
    }
}

此外,如果您a = new A();再次调用,先前的 a 实例将被标记为垃圾回收,并将 a 分配给新的 A()

于 2013-03-02T00:00:28.733 回答
1

我真的不明白您在这里要做什么,并且您的代码无法编译。我在下面创建了一个带有注释的代码的工作示例。

这回答了你的问题了吗?

public class Main {
    //Test method to instantiate a new B
    public static void main(String[] args) {
       B b = new B();
    }
}

class A {
      int a = 0;
        public A() {
         a =1;
        }
}

class B {

    public B() {
        A a = new A();
        //Print first object reference
        System.out.println("First object reference assigned to a: " + a.toString());

        //You cannot instantiate the same field/variable twice.
        // However, you can change the object reference as below
        a = new A();

        //Print second object reference
        System.out.println("Second object reference assigned to a: " + a.toString());

        //As you can see, the object
        // reference points at the new Instance of A when creating a
        // new instance of A and assigning the reference to field a

    }

}

如果您运行它,您的输出将如下所示:

First object reference assigned to a: A@750159
Second object reference assigned to a: A@1abab88
于 2013-03-02T00:15:47.617 回答