"hello"是放在String池,没有那个在常量池,因为这里没有常量
常量是final static修饰的

解决方案 »

  1.   

    常量池实际上是一个符号表,结构类型是一个数组,用索引来访问,他描述包括文字字符串,final变量的值,类名,字段名和方法名的常量
      

  2.   

    A,java/lang/Object,main,i2,fun都会放在常量池中
      

  3.   

    我在《深入java虚拟机》一书中看到:
    常量池包含了与文件中类和接口相关的常量。存储了诸如:文字字符串,final变量值,类名和方法名的常量。
    举到过这样一个例子:
    class Lava{
      private int speed = 5;
      void flow(){};
    }
    //
    class Volcano{
      public static void main(String[] args){
           Lava lava = new Lava();
           lava.flow();
      }
    }
    /////
    ......
    通过执行保存在方法区中的字节码,虚拟机开始执行main()方法,在执行时,它会一直持有指向当前类(Volcano类)的常量池的指针。
    main()的第一条指令告知虚拟机为列在常量池的第一项的类分配足够的内存。发现它的第一项是一个对Lava类的符号引用,然后它就检查方法区,看Lava类是否已经被装载了。
    ......
    紧接着,虚拟机以一个直接指向方法区的Lava类数据的指针来替换常量池的第一项(就是那个Lava)--以后就可以用这个指针来快速的访问Lava类了。这个替换过程成为常量池解析,即把常量池中的符号引用替换为直接引用。
      

  4.   

    刚看到fast_time(fast_time)的回复,谢谢。
      

  5.   

    在我的例子中的
    public static void main(String[] args){
           int x = 0;
           A a = new A();
           B1 b1 = new B1();
    }
    ///
    这里面的x,a,b1应该也是存放在常量池中了吧?fun()中的in2呢?