是值?是内存地址?是啥??

解决方案 »

  1.   

    SUN的hotspot jvm里面应该就是0。
      

  2.   

    可以去看虚拟机代码中aconst_null指令的实现。
      

  3.   

    aconst_nullOperation
    Push null
    Format
    aconst_null Forms
    aconst_null = 1 (0x1)Operand Stack
    ...  ..., nullDescription
    Push the null object reference onto the operand stack.Notes
    The Java virtual machine does not mandate a concrete value for null.
      

  4.   

    jikes vm好像是让null指向一个特殊位置,然后访问的时候由硬件检测空指针异常,提高效率。具体是啥要看vm实现了
      

  5.   

    呵呵,这个问题算有趣的吧。不管是哪个VM,要确定NULL是什么,证明之,不要猜测。
      

  6.   

    null 这个叫无 " " 这个叫空 
      

  7.   

    sun hotspot vm:
    http://www.google.com.hk/codesearch/p?hl=zh-CN#0ukxmVmYK7U/src/cpu/x86/vm/templateTable_x86_32.cpp&q=aconst_null()%20c%2B%2B%20openjdk&sa=N&cd=3&ct=rc&l=170void TemplateTable::aconst_null() {
      transition(vtos, atos);
      __ xorl(rax, rax);  //0
    }
    void TemplateTable::iconst(int value) {
      transition(vtos, itos);
      if (value == 0) {
        __ xorl(rax, rax);
      } else {
        __ movl(rax, value);
      }
    }
    void TemplateTable::lconst(int value) {
      transition(vtos, ltos);
      if (value == 0) {
        __ xorl(rax, rax);
      } else {
        __ movl(rax, value);
      }
      assert(value >= 0, "check this code");
      __ xorl(rdx, rdx);
    }IBM jikeshttp://www.ibm.com/developerworks/cn/java/jalapeno/index.html
    看一下对象布局和硬件空指针检测就清楚了。