2016-05-14 4 views
-1

最後の変数がインスタンスを指しています。私は、オブジェクトの参照をnullに変更した場合に何が起こるかを見たいと思っていました。私は非常に驚くべきことに例外もなく、 "ヌル"が印刷されていません。これは、コードa = null;の行が無視されているかのようです。最後の変数がインスタンスを指しています。インスタンスがnullになることはできますか?

出力:

myFoo.name?笑

public class TryJava { 
    class InnerFoo { 
     public InnerFoo(String name) { 
      super(); 
      this.myName = name; 
     } 
     String myName;  
     boolean isStarted; 
    } 
    InnerFoo a = new InnerFoo("haha"); 
    final InnerFoo myFoo = a; 
    void bar() { 
     a = null; // IGNORED??? 
     System.out.println("myFoo.name? " + (myFoo != null ? myFoo.myName : " is null ")); 
    } 
    public static void main(String[] args) { 
     TryJava tj = new TryJava(); 
     tj.bar(); 
    } 

} 
+1

あなたはmyFooが参照しているものを変更せず、あなたが参照しているものだけを変更しました。それ以降は参照しないので、効果はありません –

+1

これはfinalとは関係ありません。 Object(); Object b = a; a = null; System.out.println(b == null); '。 –

答えて

1

例外はありません。最終変数myFooは、refrenceがnullを指していると見なしてもInnerFoo( "haha")への参照であるためです。たとえば、最初の変数aはInnerFoo( "haha") myFooはrefrence 'a'を使用して同じインスタンスInnerFoo( 'haha')を参照します。refrence 'a'がnullを代入すると、myFooはInnerFoo( 'haha')に対してまだリフレクションしています。

4

あなたは確かにいいものをa変更。しかし、myFooはまだインスタンスを参照しています。

関連する問題