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

对于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)是个引用过程。而创建,其实还是在   隐式创建的时候。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值