查询Java中的引用

nam*_*ked 0 java reference

考虑以下继承示例:

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;  
 }
}
Run Code Online (Sandbox Code Playgroud)

我的问题在评论中.它是不同的,在某种意义上说,使用new运算符为对象创建一个新的空间,b2并且b2=b1只是将数据复制b1b2.因此,对一个对象所做的任何更改都不会影响另一个对象.在主内联代码中,B b2 = b1将指向b2分配的空间b1.因此,此处的任何更改都会影响对象数据.

我的查询是,将使用new运算符对对象操作做出任何改变吗?

sam*_*aur 9

B b1 = new B();
B b2 = b1;
Run Code Online (Sandbox Code Playgroud)

上面的代码创建一个类型的对象B.b1和b2是指向同一对象的引用.它们是同一对象的别名.

B b1 = new B(); //1
B b2 = new B(); //2
b2 = b1;        //3
Run Code Online (Sandbox Code Playgroud)

在此代码中,B在第1行和第2行创建了两个类型的对象.但是,在第3行之后,b2引用与b1相同的对象,因此两者都是别名.最初由b2引用的对象现在可以进行垃圾回收.

因此,在这两种情况下,b1和b2都指向同一个对象,并且通过两个引用都可以看到对该对象所做的任何更改.请记住,b1和b2不是对象本身,而只是对该对象的引用.b1 = b2不会将任何值从一个对象复制到另一个对象,它只是重新创建引用.