String a=null 与String a="a" 是否占用的内存空间大小一样? 它们是被放在栈里还是堆里?  我看到很多程序员在循环里面声明变量,例如     while(1){    String name ="a";}由此我联想到这样应该会增加内存的开销吧?请各位指点?

解决方案 »

  1.   

    String a=null 未分配内存
    String a="a" 分配了内存
      

  2.   

    null在java中是一个未实例话的对象,没有实例化的对象是不会被分配空间的竹子的马甲呢?
      

  3.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【Rush_2008】截止到2008-07-08 11:53:36的历史汇总数据(不包括此帖):
    发帖的总数量:6                        发帖的总分数:45                       每贴平均分数:7                        
    回帖的总数量:35                       得分贴总数量:9                        回帖的得分率:25%                      
    结贴的总数量:6                        结贴的总分数:45                       
    无满意结贴数:2                        无满意结贴分:30                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:33.33 %               无满意结分率:66.67 %                  
    敬礼!
      

  4.   


    String a=null  只是生成了一个引用,他不会占有内存空间
    与String a="a" 他对引用赋值了,所以他站用了一定的内存空间 
    但是 注意 "a" 是在栈中存放的。如果现在 String b="a" 那么 String b和string a 是引用的同一块内存空间,也就是说 String b=“a”的时候没有增加新的内存空间当 String b=new String(“a”)的时候 会在堆中给b分配新的内存空间也可以看出在while 中String name =“a”其实是不会增加内存开销的
      

  5.   

    String a = "a"  a在栈中分配内存,a指向 在数据区存放的 "a"
      

  6.   

    我觉得还是会占内存的String a = null;
    String b = "b";a 与 b 应该都会占内存吧"b"也是 会占内存的,不过不知道怎么去实验是不是有个内存检测工具?java里面
      

  7.   


    a=null,也会占用内存吗?还想知道的是,Java中内存是怎么分配的,变量和常量是放在栈里,对象是放在堆里吗?
      

  8.   

    a存放到放到哪里?int b ;
    b有没有分配空间呢?引用,或者说指针变量,会不会被分配空间呢?
      

  9.   

    String a=null 
    String a="a" 等号左边的2个a都是引用,不存在占不占内存的问题等号右边的null将引用指向空,即不分配内存;而"a"作为匿名String,存在于pool里面,作为公用,要分配内存
      

  10.   

    a="a"
    指向常量池,和a=null一样,只在栈分配
      

  11.   


    应该是的,栈用来存放常量和变量,堆用来存放new创建的对象。
      

  12.   


    内存的布局是这样的:
    code segment :存放代码(比如:还没有调用的method等);
    data segment :存放静态常量和字符串常量;
    stack :局部变量(比如:8中基本的数据类型,引用);
    heap : 动态申请的内存(对象)。只要不是new出来的东西就都不在heap中吗?
    或者说只有new出来的东西才在heap中分配内存?
      

  13.   

    while(1000次){
      String a="a";
    }  String a="a";这句话是放在{}之间的,也就是说是局部变量,因此在while执行完后,a变量就逻辑上清除了(等待垃圾收集器来收集他)
    那在执行while的时候会增加内存的开销吗,也不会,你可以把他想像成如下形式:{
      String a="a";
    }
    {
      String a="a";
    }
    {
      String a="a";
    }
    {
      String a="a";
    }





    循环1000次,每次循环结束后,就把上次的a变量清除了
      

  14.   


    String a="a"分配在String池里
      

  15.   


    其实引用也是占有内存空间的,对象的引用是被分配到栈中的,有jvm完成的,引用存放的就是一个地址
      

  16.   

    借这个地方我也问下
      
      String a,b;
      a=new xx();
    是不是建立1个对象和2个引用?还是一个引用?b算不算引用?
      

  17.   

    String a=null;并没有指定引用的内存空间,而且jvm看到null就知道暂时不用分配空间给aa = "a";jvm判断栈内是否存在对应的字符串a ,如果存在,将变量a的引用指向栈内的"a",如果不存在在栈内开辟空间,添加新的字符串"a",然后将变量a的引用指向新开辟的内存空间