`
footman265
  • 浏览: 114484 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

String的理解

    博客分类:
  • j2SE
阅读更多

本文是对http://www.iteye.com/topic/522167的阅读笔记 


String的几种使用例子:

 

    //1
    String s1=new String("abc");
    //2
    String s2="abc";
    //3
    String temp1="a";
    String temp2="b";
    String s3=temp1+temp2;
    //4
    String s4="ab"+"cd";

 

情况1:

    是使用常量构造String对象,s1是对实例的一个引用(一个地址),这个abc并不是一个对象,它是一个拘留字符串(说法来自http://www.iteye.com/topic/522167),文章的说法是:源代码中所有相同字面值的字符串常量只可能建立唯一一个拘留字符串对象.  

     这里创建了一个String内容是abc的实例,实例的内容来自一个不会改变且重用的拘留字符串对象,下次如果重新创建String对象内容还是abc的话,那么还是使用这个拘留字符串对象.

     例子:

 

String sa=new String("Hello world");            
String sb=new String("Hello world");      
System.out.println(sa==sb);  // false 

 

     sa,sb是对不同String实例的引用,尽管构造他们使用的字符都是同一个拘留字符串对象(abc).

情况2:

     s2是对一个拘留字符串对象的引用,这里没有构造对象,而是直接引用了一个拘留字符串对象(abc)

情况3:

     temp1,temp2都是拘留字符串对象(abc)的引用,在拼接的时候,先建立一个用temp1指向的拘留字符串对象(a)来构造一个StringBuilder实例,再用StringBuilder的append方法,将temp2指向的拘留字符串对象(b)加到这个StringBuilder实例的末尾,最后用toString方法返回的字符串构造一个String实例,并将它的引用赋给s3,这里使用了5个字符串对象:3个拘留字符串对象,1个String,1个StringBuilder

     例子:

 

String sa = "ab";                                          
String sb = "cd";                                       
String sab=sa+sb;                                      
String s="abcd";  
System.out.println(sab==s); // false  

 

    sab是指向String对象(内容是abcd)的引用,s是指向拘留字符串对象(abcd)的引用,返回false

情况4:

    使用拘留字符串对象的拼接,结果是:如果引用的内容是相同字面量的拘留字符串对象,那么引用的是同一个

    例子:

 

String sc="ab"+"cd";  
String sd="abcd";  
System.out.println(sc==sd); //true  

   拼接好以后都引用一个地址,自然为true.  

 

 

String sc="Hello world";    
String sd="Hello world";  
System.out.println(sc==sd);  // true 

   都变量名不一样掩盖不了他们引用同一个拘留字符串对象的本质,为true.


   如理解有错,感谢指出

 

 

 

   

    

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics