java - Java中引用的查询

标签 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;  
 }
}

我的问题在评论里。从某种意义上说,使用 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/

相关文章:

java - 在提交按钮内定义时如何获取 wicket id 的范围

java - ArrayIndexOutOfBoundsException 对不断增长的 arrayList 进行排序

java - 无法启动 Activity ... java.lang.NullPointerException

reference - 在 Latex 中引用图形

c++ - 从引用复制构建

C++ - 返回对 vector 元素的引用

java - Databricks Spark-csv 检查空文件

java - 控制对 Java 集合的并发访问的最佳方法

c++ - const 引用返回和 STL vector 的问题

PHP动态字符串更新引用