static 和 new 一个对象出来,在运行时候 ,在内存中,是哪个先被创建出来的string s ="abc";String str = new String("abc")
 
在内存中创建的顺序是怎么样的?

解决方案 »

  1.   

    1. static 和 new 一个对象出来,在运行时候 ,在内存中,是哪个先被创建出来的
     应该问static 对象和非static对象创建的顺序。
     static对象是属于类级别的,当类的加载过程中初始化,即创建对象。其他非static对象按顺序来初始化。  Object obja = new Object();      ---->2
      static Object OBJ = new Object(); ---> 1
      Object objb = new Object()       ------>3
      
    2。string s ="abc";String str = new String("abc");
    关于这个不能考虑顺序了。
    string s ="abc";在常量表中先找,如果没有找到那就分配个”abc“字符串。
    String str = new String("abc");直接在堆中创建一个对象,这个对象内容指向常量表的”abc“,如果此时”abc”字符串不存在,创建之。不知道回答你了没有?
    以上有问题的情楼下,帮我指正。谢谢。java新手谢过。
      

  2.   

    1L的说法不准确问题1: static修饰的是类静态变量,在JVM装载当前类的class字节码之后,会在内存的方法区中为static变量分配内存空间,并赋予一个默认值。之后JVM才对static变量进行初始化,实际上JVM是调用一个<clinit>方法中的指令来完成这个初始化的(<clinit>在编译阶段为类静态变量的初始化偷偷生成的方法)。
           而且static的初始化只进行一次,并且在当前类被首次主动调用的时候初始化。       new指令实在当前类被加载、连接和类静态变量初始化之后,才开始在堆中创建对象,并对对象的实例数据进行初始化的。 这个问题可以看看我的博客《【解惑】类与对象的初始化问题》问题2: 这是个老问题了,可以看看我的博客《【总结】String in Java》