当StringBuffer和String都使用new的时候 是怎么能一回事? 栈、堆和常量区在那里分别得作用? 怎么存储的?

解决方案 »

  1.   

    StringBuffer是字符串缓冲区,其中封装了String数组来存储添加进的字符信息
    而String只是一个字符串,前者共能更强大点,
    当我们StringBuffer sb=new StringBuffer();时,sb引用存在于栈内存中而
    new StringBuffer对象存在于堆内存中;
    而我们 String str=new String("字符串");时内存情况情况跟前者差不多,
    只是前者内部使用了(或者说封装了)String数组;
      

  2.   

    一般推荐使用StringBuilder,这个效率相对高些,只是相对于StringBuffer少了多线程的锁
    但是我们可以自己添加线程锁;建议楼主多看看书!强烈推荐传智播客的java视频教程
      

  3.   

    String s = new String("字符串"); 这样创建了几个object?  不是说在常量去也存着一个值吗? 用==比较字符串 画个关于堆、栈和常量区的图出来
      

  4.   

    如果前面已经有String str = “字符串” ;
    那么此时当然常量池中就有一个"字符串"的这个值 如果前面没有 用new的时候当然没存这个值了 
    所以现在王里面加 那么此时就是两个
    如果有就是一个 
    常量区不止存有String类型的 其他常量也存着 只是在不同的区 
    如果不好理解堆和栈的话 就把堆看着存变量名 栈存地址
    这样考虑其关系起来应该就好理解多了