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