删除java中指向对象的所有指针

删除java中指向对象的所有指针,java,pointers,null,Java,Pointers,Null,好的,事情是这样的。我有多个指向一个对象的指针,我想同时删除它们。我在下面简化了它,所以不要费心问我到底为什么要尝试下面的东西:) 在上面的示例中,输出结果仍然是“已分配”。然而,我希望第一个不再被分配。在上面的示例中,通过将其设置为null是很容易的,但在我的实际示例中,这是不可能的(首先被传递到一个方法中,我想在其中删除assingment) 编辑: 所以,我想问题是,是否有可能删除指向给定对象的所有指针 显然,我的问题有点模糊,所以让我们试着给出一个更好的例子: String first

好的,事情是这样的。我有多个指向一个对象的指针,我想同时删除它们。我在下面简化了它,所以不要费心问我到底为什么要尝试下面的东西:)

在上面的示例中,输出结果仍然是“已分配”。然而,我希望第一个不再被分配。在上面的示例中,通过将其设置为null是很容易的,但在我的实际示例中,这是不可能的(首先被传递到一个方法中,我想在其中删除assingment)

编辑:

所以,我想问题是,是否有可能删除指向给定对象的所有指针

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

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

public void Remove(String string) {
   //Do something 
    //...and remove
   string = null;
}
问题是,第一个仍然是指“分配”。。。但从我目前在答案中看到的来看,没有办法解决这个问题

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

如果要删除,您必须将
null
分配给所有单个
对象

C>可以使用
来完成,但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;
    }
}

不,不可能删除指向给定对象的所有“指针”,因为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";
}
当然,这只适用于没有其他类型返回值的情况,并且只适用于单个值


可以使用holder模式在Java中模拟输出(和输入/输出)参数,例如,请参见

我怀疑您试图做的是可能的为什么要这样做?什么是second=test?显然,first将打印“ASSIGNED”,因为字符串池中的值的第一个引用仍然存在。阅读关于
字符串常量池
在您的实际示例中,将其传递给方法后设置first=null,然后在方法中,将传递first值的参数设置为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";
}