String s1=new String("5fen"); 
String s2=new String("5fen"); 
为什么会是3个对象呢?这3个对象又分别是什么呢?String s2=new String("5fen"); 
为什么会是2个对象呢?这2个对象又分别是什么呢?
我看了下API,但是还是不是很清楚,希望大家指点下,麻烦说的详细点,小弟感激不尽...

解决方案 »

  1.   

    字符串池里有一个“5fen”
    还有堆里有2个String,也就是s1 s2
    所以String s1=new String("5fen"); 
    String s2=new String("5fen"); 
    三个对象
      

  2.   

    三个(一个是“5fen”,两个是指向“5fen”的引用对象s1,s2)
      

  3.   

    内存中开辟了一个‘5fen'的区域,还有2个是指针,分别是s1,s2,这2个指针指向这快内存区域,不懂这么说对不对,我是这么理解的
      

  4.   

    字符串池里有5fen外加2个对象
      

  5.   

    现在不理解没关系 你记下来就行了 以后慢慢会理解的
    你现在记住 ‘5fen’这是什么一个对象
    String s1 
    String s2
    这又是两个 记着就行了
      

  6.   

    如果不使用new关键词,"5fen"在字符串池中建立,例如:String s = "5fen";
    如果使用new关键词,首先就会检查字符串池中是否有“5fen”,
    如果有,则直接在栈中建立一个新的字符串对象“5fen”,例如:String s = "5fen"; String s1 = new String("5fen");这两句话分别产生一个对象,一个在池中,一个在栈中
    如果没有,则先在字符串池中新建一个“5fen”,然后再在栈中新建一个对象“5fen",例如:String s1 = new String("5fen");这一句话总共产生了2个对象,一个在池中,一个在栈中
      

  7.   

    String s1=new String("5fen"); 
    String s2=new String("5fen"); 
    第一句话,由于字符串池中还没有"5fen",所以现在字符串池中新建了一个"5fen"对象,然后再在栈中新建一个字符串对象"5fen",一共是2个对象
    第二句话,字符串池中已经有一个“5fen”了(第一句中生成),所以不再在字符串池中生成这个“5fen”对象,所以直接在栈中建立一个新的对象“5fen”,就是第3个对象(每次用new都会建立一个新对象,不管之前有否出现过)
      

  8.   

    "5fen"字符串是在栈里(栈里存的共享的数据)
    s1,s2是new出来的在堆里
    共3个对象
      

  9.   


    为什么会首先去字符串池里检查是否有"5fen"对象呢?
      

  10.   

    String s1 = new String("5fen");
    String s2 = new String("5fen");首先,会在字符串池中创建一个不可变的字符序列,内容是"5fen",然后分别在堆中创建了2个对象,s1指向堆中的第一个对象,而对象会指向这个字符序列。s2也一样。这样,在这个内存中,就出现了3个对象。理解了第一个问题,第2个不就清楚了么。呵呵
      

  11.   

    String s1=new String("5fen"); 
    String s2=new String("5fen"); 
    是3个对象
    对象分别按顺序是:s1 、  5fen   、  s2
    分析:if(s1==5fen){
             if(s1==s2)
             if(s2==5fen)
    运行结果是:false   false   false  String s2=new String("5fen"); 
    2个对象
    对象分别按顺序是: s2 、  5fen 
    if(s2==5fen)
    运行结果是: false总结:如果是一个对象的话,它们就会相等。