对象的引用不是更新对象

嗨,我正在使用看起来像这样的代码。

class A { Custom objA; public A() { //Assign some value to objA; B obj = new B(objA); } } class B { Custom objB; public B(Custom obj) { this.objB = obj; } public void Func() { this.objB = null; } } 

其中Custom是自定义可空类型。

现在,根据我的知识,每当我调用class BFunc()时,必须更新objA以使值为null。 然而,这不是正在发生的事情。

我在这里做错了吗?

首先,在第5行,您有语法错误。 如果您正在尝试创建B的新实例,则可以执行B obj = new B(objA) 。 但我只能猜测。

你想要做的是修改objA ,方法是将它传递给B类的新对象,将其存储在一个字段中,然后修改字段。 问题是您存储的内容是对objA的引用的副本。 当你执行this.objB = null ,你正在修改字段objB以获得一个新的引用( null ),但是你没有对字段objA做任何事情,它是A类实例的成员。

在我看来,这是您在问题中询问的代码:

 class A { Custom objCustom; public A() { objCustom = new Custom(); B objB = new B(objCustom); objB.Func(); } } class B { Custom objCustom; public B(Custom objCustom) { this.objCustom = objCustom; } public void Func() { this.objCustom = null; } } 

这编译并具有相当一致的命名约定。

你在A类和B类中A Custom objCustom字段的问题是,即使它们在调用.Func()之前都引用了同一个实例,你需要理解Custom objCustom字段只是对象的引用,而不是对象本身。 因此,当您调用.Func()您将在objBCustom objCustom分配一个新引用,但是您没有对objA的引用执行任何objA 。 它仍然指向原始对象。

在函数Func您为B对象(不是A对象)的字段分配null ,因此在此对象之后, B对象的调用字段objB未指向Custom类型的任何对象,但是A对象的objA字段仍指向单个Custom宾语。

这是代码示例,其中Func将更改A对象的objA字段:

 class A { public Custom objA = new Custom(); public A() { B obj = new B(this); B.Func(); // after this, objA field will be null } } class B { А obj; public B(А obj) { this.obj = obj; } public void Func() { obj.objA = null; } } 

另请注意:

  1. 当你创建一个A对象时,它的objA字段是null ,所以在A构造函数中你实际上调用了B obj = new B(null); ,所以它的objB字段也是null
  2. 在构造A对象之后,将处理类型为B对象obj ,因为您没有对其进行引用,因此您不在示例中调用Func函数。