java在编译器,到底做了那些工作?是否给变量(包括应用类型)分配了内存空间,比如:String s = new String("abc");

解决方案 »

  1.   

    编译的时候怎么可能给变量分配内存、。。
    ps:我表示看不懂楼主的言语“java在编译器,到底做了那些工作”
      

  2.   

    编译期跟内存并不实际发生关系,只有运行的时候,才会把字节码载入内存解析,所以说,编译不会分配实际的内存,但是编译会为变量指定相对地址,因为class加载进来后,会在那个内存段,编译器并不知道,但是只要有相对地址,运行时就能找到对应的变量。打个比方,变量被编译为一个相对地址0001,假设class被加载在0000地址的内存上,那么运行时,会到0000+0001地址去读写变量信息,如果class被加载在0005地址的内存上,那么运行时,会到0005+0001地址去读写变量信息,所以编译器能做到的就是为变量指定相对地址。所以String s = new String("abc");在编译期间,并不会生成对象,也不会分配内存,但是会把给s指定一个相对地址,同时把语句翻译为伪代码写到class文件中。