考虑以下继承示例:
class A {...}
class B extends A
{
..
..
private static void main(String[] s)
{
A a1 = new A();
B b1 = new B();
B b2 = b1; // What if it was B b2 = new B(); b2 = b1;
}
}
我的问题在评论里。从某种意义上说,使用 new 运算符为对象 b2 创建一个新空间,而 b2=b1 只会复制将b1
的数据写入b2
。因此,对一个对象所做的任何更改都不会影响另一个对象。在主内联代码中,B b2 = b1
会将 b2
指向为 b1
分配的空间。因此,此处的任何更改都会影响对象数据。
我的疑问是,使用 new
运算符会对对象操作产生任何影响吗?
最佳答案
B b1 = new B();
B b2 = b1;
以上代码仅创建一个类型为B
的对象。 b1 和 b2 是指向同一对象的引用。它们是同一对象的别名。
B b1 = new B(); //1
B b2 = new B(); //2
b2 = b1; //3
在此代码中,在第 1 行和第 2 行创建了两个 B
类型的对象。但是,在第 3 行之后,b2 引用了与 b1 相同的对象,并且两者都是因此又是别名。最初由 b2 引用的对象现在符合垃圾回收的条件。
因此,在这两种情况下,b1 和 b2 都指向同一个对象,并且对该对象所做的任何更改都将通过这两个引用看到。请记住,b1 和 b2 本身不是对象,而只是对该对象的引用。 b1=b2 不会将任何值从一个对象复制到另一个对象,它只是重新指向引用。
关于java - Java中引用的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3376698/