2015-04-28 28 views
0

我碰到過Java中的一些東西,我真的在撓撓頭腦,試圖弄清楚發生了什麼。Java - 實例變量在同一線程中神祕地變爲空

我創建一個對象objA,並在它的構造我這個對象添加到另一個對象objB:

objB.addListener(this); 

後來,一個方法被調用objA,它調用了在objB的方法,然後調用回objA:

objA.doSomething()=> objB.doSomethingAlso => objA.doSomethingElse()

objA.doSomething(); 

在objA:

public void doSomething() { 
    _instanceVar = initInstanceVar(); 
    objB.doSomethingAlso(); 
} 

在objB:

public void doSomethingAlso() { 
    ... 
    getRefToObjA().doSomethingElse(); 
} 

在objA再次:

public void doSomethingElse() { 
    _instanceVar.someMethod(); 
} 

然而,當doSomethingElse()被調用,_instanceVar(!實例變量)現在是零。它被初始化爲doSomething()中的非空值...現在它怎麼變爲空?它沒有被明確設置爲null。所有這些方法調用(就我所知而言)都發生在同一個線程中。

我在這裏錯過了什麼?那個實例變量如何可以爲空?

+2

清理你能告訴所有的代碼? – bhspencer

+6

如果是線程問題,每個細節都很重要 - 你應該發佈一個[mcve](http://stackoverflow.com/help/mcve) – assylias

+0

內容:initInstanceVar();? – Arpit

回答

0

只有兩件事情可能發生在這裏

  1. initInstanceVar();返回null
  2. 不知何故,變量被垃圾收集器