2015-09-10 92 views
-1

好的,這是事情。我有一個對象的多個指針,我想刪除它們。我已經簡化它,下面,所以也懶得問,爲什麼在地球上我會嘗試以下:)刪除所有指向java中的對象的指針

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

的東西在上面的例子中,輸出仍然會導致「入駐」。但是,我希望先不再分配。在上面的例子中,通過將它設置爲null很容易,但在我的真實例子中,這是不可能的(首先被傳入一個方法,我想刪除該方法)。

編輯:

所以,我想的問題是,如果有可能刪除所有指向給定對象。

顯然,這是一個有點模糊了我的要求,所以讓我們嘗試給出一個更好的例子:

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

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

的事情是,第一仍然參考的「分配」 ......但是,從我閱讀答案到目前爲止,有沒有辦法解決這個問題?

+1

我懷疑你想要做什麼是可能的 – MadProgrammer

+1

你爲什麼想要這樣做? –

+0

什麼是秒=測試?顯然首先會打印「ASSIGNED」,因爲字符串池中的值的第一個引用仍然存在 – virendrao

回答

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

+0

我想我已經找到了解決方案。我想分享它,但我似乎無法回答我自己的問題。 Aslo,你不能在評論中得到任何代碼 – MWB

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

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; 
    } 
}