`
wing123
  • 浏览: 796676 次
  • 性别: 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)是个引用过程。而创建,其实还是在   隐式创建的时候。

分享到:
评论

相关推荐

    String对象创建问题

    在上面的例子中,`s3`和`s4`指向堆内存中不同的`String`对象,尽管它们的值相同。这种方式创建的`String`对象不会共享,所以可能会消耗更多的内存。 此外,`String`对象还可以通过`StringBuffer`或`StringBuilder`...

    StringtoList和StringtoMap和StringtoObject和StringtoArray

    在Java编程中,经常需要处理JSON格式的数据,它是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON格式通常用于前后端数据交互,因为其结构清晰,支持复杂的数据结构,如对象(Object)...

    Java String 和 new String()的比较与区别

    String 和 new String() 虽然都是创建字符串对象,但是它们的实现机制和结果却有很大的区别。 首先,我们来了解一下 String 的实现机制。在 Java 中,String 是一个不可变的对象,也就是说一旦创建了 String 对象,...

    关于String s=new String( "Hello")的例子思考

    关于String s=new String( "Hello")的例子思考

    C#中char[]与string之间的转换 string 转换成 Char[]

    今天,我们将探讨C#中char[]与string之间的转换,包括string转换成Char[]和Char[]转换成string,同时也会涉及到byte[]与string之间的转换。 首先,让我们来看一下string转换成Char[]。在C#中,我们可以使用...

    String类型两种不同实例化方式

    使用new创建String对象时,JVM不会去检查常量池中是否已有相同的字符串,而是直接在堆内存中创建一个新的String对象。这意味着即使两个使用new关键字创建的字符串内容完全相同,它们也是不同的对象,拥有不同的内存...

    Java中的String池

    这意味着如果使用`new String("Hello").intern()`来创建字符串,那么即使使用`new`关键字创建了一个新的对象,最终也会返回String池中已有的`"Hello"`字符串的引用。 #### 总结 通过以上分析可以看出,在Java中...

    小心String的陷阱——深入剖析Java中String的处理机制

    即使`String Pool`中已经有相同的字符串,使用`new`关键字仍然会创建一个新的对象,这可能导致内存浪费。 ### 性能考量 在代码示例中,作者通过测量两种创建`String`对象方式的时间差异来比较它们的性能。结果显示...

    string中的常见问题

    在 Java 中,有两种常见的字符串比较方式:`==` 和 `.equals()` 方法。 - **`==`**:用于比较两个变量指向的是不是同一个对象(即内存地址是否相同)。对于 `String` 类型来说,如果两个字符串都是通过直接赋值的...

    List转换成String数组

    - `list.toArray(new String[list.size()])`将`List<String>`中的所有元素复制到新创建的字符串数组中。 **方法二:简化版toArray()方法** ```java List<String> list = new ArrayList<String>(); list.add("a1");...

    String中==与equals区别验证

    这里,`c` 引用了由 `new` 关键字创建的一个新 `String` 对象,尽管其内容与 `a` 和 `b` 相同,但 `a == c` 返回 `false`,因为它们指向不同的内存位置。然而,`a.equals(c)` 返回 `true`,因为它们的内容确实是相同...

    String型的不可变性

    第二种形式是先在栈中创建一个对 String 类的对象引用变量 str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令 str 指向"abc",如果已经有"abc",则直接令 str 指向"abc"。 那么,为什么 String...

    String、StringBuffer、StringBuilder的使用方法

    在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...

    Android byte[] 和 String互相转换

    在Java和Android中,将字节数组转换为字符串最常用的方法是使用`new String(byte[])`构造函数。此方法会使用平台默认的字符编码,这可能会导致在不同系统上显示不同的结果。为了避免这个问题,我们通常指定一个明确...

    list转换成string数组

    - **数组长度**:当使用`new String[list.size()]`创建数组时,确保列表中的元素数量与数组长度一致,避免出现数组越界的问题。 - **性能考虑**:在转换过程中,尽量减少不必要的对象创建,尤其是当列表很大时,这...

    深入了解java 中的String

    使用 `new` 关键字创建 `String` 对象时,虽然语法上看起来类似直接赋值的方式,但实际上是在堆内存中创建了一个新的 `String` 对象: ```java String s1 = new String("abc"); ``` 这种方式创建的字符串不会存放在...

    C#_string_byte数组转换解析

    在C#编程语言中,字符串(string)与字节数组(byte array)之间的转换是常见的操作,尤其在处理二进制数据、网络传输或文件读写时。本篇文章将详细解析C#中如何进行这两种数据类型的转换,并讨论转换过程中需要注意...

    JavaBean与JsonString的相互转换

    在Java开发中,JavaBean和JsonString是两种常见的数据表示形式。JavaBean是Java对象的一种规范,用于封装数据,而JsonString是一种轻量级的数据交换格式,常用于前后端交互。本篇将深入探讨JavaBean与JsonString之间...

    Delphi new\dispose内存泄露问题解决方案

    首先,`new`和`dispose`是Delphi中用于动态内存分配和释放的关键操作。`new`关键字用于在堆上为对象或类型分配内存,而`dispose`则用于释放之前通过`new`分配的内存。然而,如果没有正确地调用`dispose`,就会导致...

Global site tag (gtag.js) - Google Analytics