2013-05-30 27 views
0

如果我們有這樣的代碼:在Java中執行「hash == 1」的位置?

class A { 
    private hash = 0; 

    public void test(){ 
    if (hash == 1) { 
    //dosomething 
    } 
    } 
} 

如果完全進行比較?

這裏是我的理解:

  1. 負載散列成線程的堆棧,命名爲R1。
  2. 比較R1與文字1.

是不是?在含義時間裏,堆中的散列可以改變?

+0

我覺得你很困惑。哈希不是堆中的位置,哈希是一個值,表示哪些對象相互獨立。 – greedybuddha

+0

@greedybuddha,我不確定,但是IIRC所有的實例變量都位於堆中,但是它們的值不可以。 – MrROY

+0

這些位置絕對不是,沒有辦法訪問java內部的堆位置。 – greedybuddha

回答

4

字段散列和常量1都加載在堆棧上。然後進行比較:

... 
GETFIELD A.hash : I // push hash onto the stack 
ICONST_1    // push 1 onto the stack 
IF_ICMPNE L1   // pop the top two ints off the stack and compare them 
...     // do smth 
L1 
RETURN