6

是否可以将类中的类的实例设置为空。例如,我可以做这样的事情吗

int main{
    //Create a new test object
    Test test = new Test();
    //Delete that object. This method should set the object "test" to null, 
    //thus allowing it to be called by the garbage collector.
    test.delete();

}


public class Test{

    public delete(){
        this = null;
    }
}

我已经尝试过了,但它不起作用。使用“this = null”我得到左侧需要是变量的错误。有没有办法实现类似的东西?

4

5 回答 5

8

对象的实例不知道哪些引用可能正在引用它,因此对象中的代码无法使这些引用为空。你要求的是不可能的(*)。

*至少在没有添加一堆脚手架来跟踪所有引用的情况下,并以某种方式告知其所有者它们应该被取消 - 绝不会是“只是为了方便”。

于 2013-06-04T17:44:14.057 回答
4

你可以做这样的事情

public class WrappedTest {
    private Test test;
    public Test getTest() { return test; }
    public void setTest(Test test) { this.test = test; }
    public void delete() { test = null; }
}
于 2013-06-04T17:43:21.317 回答
0

this是对您的类的实例的引用。当您修改引用变量时,它只会修改引用,而不会修改其他任何内容。例如:

Integer a = new Integer(1);
Integer b = a;

a = new Integer(2);      //does NOT modify variable b

System.out.println(b);   //prints 1
于 2013-06-04T17:44:16.167 回答
0

this”是最终变量。您不能为其分配任何值。

如果你想设置参考 null 你可以这样做

test = null;
于 2013-06-04T17:39:53.053 回答
0

Is it possible to set to null an instance of a class within the class?.

您不能从同一实例的成员方法中执行此操作。所以,this=null或者那种事情是行不通的。

为什么将实例设置为空?

这个问题本身是错误的,我们设置了引用null而不是实例。未使用的对象在 java 中自动进行垃圾收集。

如果你设置test=null它最终会被垃圾收集。

 int main{
    //Create a new test object
    Test test = new Test();
    // use the object through test
    test=null;
}
于 2013-06-04T17:46:58.927 回答