String str1 = "abc";String str2 = new String("abc");谁能详细分析下str1和str2中abc的存储地址,以及他们的存储方式,是怎么指向的,它们是不是同一个abc?谢谢了

解决方案 »

  1.   

    不是同一个abc,用System.out.print(str1 == str2);就知道了.其他问题等待高手回答.
      

  2.   

    反正不是一个abc  具体的还真不太清楚  可能一个存在常量池 一个存在堆里吧
      

  3.   

    不一样new String("abc"); 常量池
    "abc 堆   可以上网查一下,我也不清楚了忘记了
      

  4.   

    太深奥了。。要寻汇编语言估计才知道这些。。但是两个"abc"绝对不是同一个,new一个类的时候是把它复制一份到自己这里。如果是一个那还了得啊。。那不是每个类修改了abc之后,别人用的时候就不是abc了。
      

  5.   

    String str1 = "abc"; 
    是放在常量池中(常量池应该在perm区)
    String str2 = new String("abc"); 
    是直接在heap中申请空间
    引用都是在堆栈中存放,指向内存中的对象,两个abc不是一个对象
      

  6.   

    看这个你就明白了。
    http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx
      

  7.   

    String str1="abc";这里的“abc”是字符串常量 是放在常量池中的
    String str2=new String("abc");是在堆中分配空间
    而str1个str2都只是引用  即str1指向常量池中的区域
    而str2指向堆内存中的区域
    str1==str2为false
      

  8.   

    String str="name",String str2 = new String ("name");
    str 先会在一个叫常量池中查找是否有一个值为name的常量str存在!如果不存在就会放入一个!
    只创建一个对象!而str2先会在常量也中查找!如果有值为name的常量就会引用!不会再创建!然后再
    在堆中new 一个对象出来!也就是说创建了两个对象!
      

  9.   

     他们不是同一个 地址 
     你试试这: String a = "abc"; String b = new String("abc");
     if(a == b)System.out.println("a和b地址相等");
     注意,我们这里的 "==" 并不是判断值是否相等,是判断两个对象里面的地址是否相等. 
     这里你就知道了~ 
     其实每一个 String 都是一个对象
     你 new 了,自然会生成一个新的对象,所谓新的对象,最起码的,它们的地址不会相等~