所以说我有一些像这样的测试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并销毁旧对象?还是会出错?它只是重置旧对象吗?
我已经尝试了几次并且不太了解输出。
答案 0 :(得分:4)
这是第二个A
对象。
第一个将很快收集垃圾。
请注意,您也可以
new A();
new A();
不将它们存储在变量中。它完全有效,并将被执行。
另请注意
A obj1 = new A();
A obj2 = obj1;
不复制对象,但它是对同一对象的引用。显然,你也可以有0个引用。
答案 1 :(得分:1)
我不相信这会编译。
但是如果问题是当我两次调用构造函数时会发生什么,答案是你得到了两个类的实例:
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()
答案 2 :(得分: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