`
wing123
  • 浏览: 804313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

String中new 和 " "有什么不同;

JDK 
阅读更多

对于String   ,大家知道JDK里的构造方法有三种  
  public   String();  
  public   String(String   value);  
  String(StringBuffer   buffer);  
  JLS里说了。  
  String   是唯一一个不需要new   来初始化的。。所以你在jdk的api中别指望找到其他类象String一样的。  
  由于字符比较具有特殊性,也就决定了String类的特殊性。  
  大家想想:如果   String   a   =   new   String();这样意味着什么?String 实例化了一个a。并且给它赋予了"" 空字符串,并且是一个0长度的字符数组。那这样的初始化有什么意义呢?  
   
  所以String   a   =   new   String(),为了方便索性就不用了.String   a   ;。  
  JLS说。每当一个0长度的字符串从类文件的常量池装载的时候都要调用一个String()构造方法。  
  也就是说   String   a;String   b;这样的写法,a,b都自动的调用a   =new   String();b=new   String();  
  在看看String 构造不为0零长度的字符串:比如String   a   ="abc";  
  由于String   在类文件加载的时候,会隐含的创建一个String对象。  
  String   a   ="abc";a对象已经创建,并且给予赋值。   由于String其实是一个char[]数组,所以在String   a   ="abc";的时候也等于是隐式创建了char[]数组。  
   
   
   
  那 String(String   value)的构造方法就是干什么呢?  
  JLS里说,它是一个复制构造方法。  
  看个例子  
  class   Test{  
              public   static   void   main(String[]   args   ){  
                            String   a=   "abc";  
                            String   b=   new   String(a);  
                            System.out.println(b.equals(a));   //true  
                            System.out.println(b==a);                 //false  
            }  
  }  
  看见了,两个构造方法其实是不一样的。  
  String(String   value)其实是等价引用创建一个"abc",而String   s是直接创建了。  
  也就是说String(String   value) 找到   a   字符串变量,然后将a引用过来。。    
  String(String   value)是个引用过程。而创建,其实还是在   隐式创建的时候。

分享到:
评论
Global site tag (gtag.js) - Google Analytics