删除java中对象的所有指针

时间:2015-09-10 05:18:21

标签: java pointers null

好的,这就是事情。我有一个指向对象的多个指针,我想删除它们。我在下面简化了它,所以不要理会为什么我会尝试下面的事情:)

    String first = "ASSIGNED";
    String second = test;
    second = null;
    System.out.println(first);

在上面的示例中,输出仍然会导致“ASSIGNED”。但是,我想首先不再分配。在上面的示例中,通过将其设置为null很容易,但在我的实际示例中,这是不可能的(首先将其传递到方法中,我想要删除分配)。

修改

所以,我想问题是,如果可以删除指向对象的所有指针。

显然我的要求有点模糊,所以让我们试着给出一个更好的例子:

String first = "Assigned";
doSomethingAndRemove(first);

public void Remove(String string) {
   //Do something 
    //...and remove
   string = null;
}

事情是,第一个仍然是引用“已分配”...但是从我到目前为止在答案中读到的内容来看,没有办法解决这个问题?

3 个答案:

答案 0 :(得分:1)

C#可以使用ref来完成,但Java不能。如果你必须这样做,以下是Java的最后一招。

public class Nullify
{
    public static void main(String[] args) {
        String[] first = { "ASSIGNED" };
        System.out.println("first[0] = " + first[0]);

        nullify(first);
        System.out.println("first[0] = " + first[0]);
    }

    private static void nullify(String[] array) {
        array[0] = null;
    }
}

答案 1 :(得分:1)

不,不可能删除给定对象的所有“指针”,因为Java没有指针,它们被称为引用。

Java和JVM都不知道对给定对象的所有引用。这就是为什么垃圾收集器必须扫描所有内容才能找到未使用的对象。

必须清除引用,并且您无法清除用于从被调用方法中传递参数的引用变量,因为Java是按值传递,意味着引用(不是对象)被复制。

示例:

public static void main(String[] args) {
    String var1 = "Hello";
    doSomething(var1); // The value of var1 is copied to param1
}
private static void doSomething(String param1) {
    param1 = null; // Only clears the param1 reference
    var1 = null; // Cannot do this, because doSomething() does not have access to var1
}

只有方法main中的代码才能更改var1的参考值。

<强>更新

如果您希望方法doSomething能够将var1更新为其他值,请执行以下操作: null,然后通常的做法是简单地返回更新后的值。

public static void main(String[] args) {
    String var1 = "Hello";
    var1 = doSomething(var1);
}
private static void doSomething(String param1) {
    // do something with param1
    return "Goodbye";
}

这当然只有在您没有不同类型的返回值时才有效,并且仅适用于单个值。

可以使用持有者模式在Java中模拟输出(和输入/输出)参数,例如,见Output Parameters in Java

答案 2 :(得分:0)

String s=ASSIGNED;
String s2=s;
String s2=null; // means just remove the link s2 is pointing to
System.out.println(s); // print ASSIGNED
看到了这张照片。

enter image description here

如果您要删除,则必须将null分配给所有个人objects