请问:String s1 = new String("abc");和String s2 = "abc";有什么不同?主要是内存中的堆中、栈中的情况。非常谢谢大家啊。

解决方案 »

  1.   

    没有什莫不同
    都是String的对象类型
    都是被放在堆内存中,而不是栈内存
      

  2.   

    String s1 = new String("abc");是在堆中生成;
    String s2 = "abc";是直接在字符串池中查找得到;
    两者不一样
      

  3.   

    http://hi.baidu.com/whofly/blog/item/93792adf123a251548540300.html
      

  4.   

    堆与栈的区别
    栈,用来存取基本类型数据和一些对象的引用。
    堆,用来存取new出来的对象或数组。
    两个表达式都从栈中申请了部分空间,但第一个要从堆中申请空间,而第二个有可能申请也有可能不申请。这里涉及到了对象缓存池的概念,如果"abc"已经在池子中了,那么s2就直接应用到它了,而无需从堆中申请空间了。
      

  5.   


    那字符串常量池也是在堆内存中的两种方式创建出来的对象都会被放到String的常量池中
      

  6.   

    在JDK5.0中,java虚拟机在启动的时候会实例化9个对象池,这九个对象池分别用来存贮8种基本类型的包装类对象和String对象。当在程序中直接用""括起来一个字符串时,JVM就到Sring对象池里面去找看是否有一值相同的对象,如果有,就拿现成的对象,如果没有,则JVM在堆中创建对象并把它放进对象池中,并返回。
    如果采用new的方式就是直接在堆中创建对象,JVM不会主动把它放进对象池中。
      

  7.   

    哈哈,Java 版最为经久不衰的问题
      

  8.   

    开辟了两String 和一个String