分配了几次,为什么?多谢。

解决方案 »

  1.   

    String s ="S1" 一次 
    String s="S1"+"s2" 内存指向地址不同
      

  2.   

    String s="S1"+"s2" 内存指向地址不同
    什么意思?
      

  3.   

    .entrypoint
      // 代码大小       8 (0x8)
      .maxstack  1
      .locals init ([0] string s)
      IL_0000:  nop
      IL_0001:  ldstr      "S1s2"
      IL_0006:  stloc.0
      IL_0007:  ret都是一次il你看懂了么?
      

  4.   

    string s = "S1" + "s2";这个是代码
      

  5.   


    我假设你知道il跟c#的关系,如果这个不知道请搜索去。.locals init ([0] string s) 声明局部变量sIL_0001: ldstr "S1s2"Ldstr的名称是文本 "load a string on the stack"的缩写版本。栈是一块内存区域,它用来传递参数到函数中。 所有的函数从栈上接收它们的参数。也就是说 string s="S1" + "s2"; 被改成了 s="S1s2"; 而只有一次内存分配。你看懂了没??
      

  6.   

    我觉得这个问题,可以用做菜来解释。String s ="S1" 一次  
    储存S的内盘比喻为盘子, S1为炒青菜。 一个装载S这个盘子里,厨师分配一次盘子(内存)String s="S1"+"s2" 
    改青菜炒豆腐了,同样厨师也是存放在一个盘子S里 分配一次内存。 其实S=S1  和 S=S1+S2 只是值不同而已。