在Java中执行'hash == 1`的确切位置?

时间:2013-05-30 02:30:03

标签: java jvm

如果我们有这样的代码:

class A {
  private hash = 0;

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

确切地说比较执行了什么?

以下是我的理解:

  1. 将哈希加载到线程的堆栈中,名为r1。
  2. 将r1与文字1进行比较。
  3. 是不是?在意义时间内,堆中的哈希值可以改变吗?

1 个答案:

答案 0 :(得分: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