zoukankan      html  css  js  c++  java
  • [细说Java](3)创建字符串是使用" "还是构造函数?

    在Java中。能够使用两种方式创建字符串:
    String x = "abc";
    String y = new String("abc");
    对于这两种方式(双引號,构造函数)它们究竟有什么差别呢?

    1. 双引號 vs 构造函数

    这个问题能够使用这两个简单代码实例来回答:

    实例一
    String a = "abcd";
    String b = "abcd";
    System.out.println("a == b : "+(a == b)); // true
    System.out.println("a.equals(b) : "+(a.equals(b))); // true
    a== b等于true 是由于x和y指向方法区中同一个字符串常量。内存引用是同样的。

    当同样的字符串常量被多次创建时。仅仅会保存字符串常量的一份副本。这称为“字符串驻留”。在Java中。全部编译时字符串常量都是驻留的。


    实例二

    String c = new String("abcd");
    String d = new String("abcd");
    System.out.println("c == d : "+(c == d)); // false
    System.out.println("c.equals(d) : "+(c.equals(d))); // true
    c== d等于false 是由于c和d指向堆中不同的对象。不同的对象拥有不同的内存引用。

    以下图论证了以上的结论。


    2. 执行时字符串驻留

    执行时也会发生字符串驻留,即使两个字符串是由构造函数方法创建的。
    String c = new String("abcd").intern();
    String d = new String("abcd").intern();
    System.out.println("c == d : "+(c == d)); // true
    System.out.println("c.equals(d) : "+(c.equals(d))); // true (JDK1.7)
    假设字面值“abcd”已经是字符串类型,那么使用构造函数方式仅仅会创建一个额外没实用处的对象。
    因此。假设你仅仅须要创建一个字符串。你能够使用双引號的方式。假设你须要在堆中创建一个新的对象,你能够选择构造函数的方式。
































  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7209472.html
Copyright © 2011-2022 走看看