• 四、用“”或构造函数创建Java的String区别


    在Java中,一个字符串可以通过下面两种方法创建。

    
    String x = "abc";
    String y = new String("abc");


    用双引号创建和用构造函数创建有什么区别那?
    1、 双引号vs构造函数
    这个问题可以通过下面两个简单的例子来回答。

    例子1:

    
    String a = "abcd";
    String b = "abcd";
    System.out.println(a == b);  // True
    System.out.println(a.equals(b)); // True
    


    a==b 为真,是因为在a和b都指向方法区域(保存常量池、字段和方法数据)
    中相同的字符串常量。
    当一个字符串常量被创建多次,只有一份字符串的值被保存。这被叫做“string interning”
    所有编译时候的字符串常量在java中都是被自动interned。
    例子 2:

    
    String c = new String("abcd");
    String d = new String("abcd");
    System.out.println(c == d);  // False
    System.out.println(c.equals(d)); // True
    


    c==d为假是因为c和d分别引用堆中不同点对象。不同的对象当然有不同的内存的引用。
    下面的图显示上面的两种情景:
    two string


    2、 运行时String Interning
    感谢LukasEder (他的建议如下):
    String interning 即使两个字符串通过构造函数创建,在运行时候仍然可用。

    
    String c = new String("abcd").intern();
    String d = new String("abcd").intern();
    System.out.println(c == d);  // Now true
    System.out.println(c.equals(d)); // True
    

    3、 什么时候使用它
    因为字符串常量“abcd”也是个字符串类型,而且使用构造函数将创建个额外的对象。因此如果你需要创建一个引用字符串,应该使用双引号。
    如果你需要在堆中创建一个新对象,那么应该使用构造函数。

  • 相关阅读:
    POJ 1045
    POJ 1051
    POJ 1047
    POJ 1050
    POJ 1046
    POJ 1036
    POJ 1035
    POJ 1032
    【洛谷P1412】经营与开发
    【洛谷P3377】【模板】左偏树(可并堆)
  • 原文地址:https://www.cnblogs.com/seaspring/p/5268276.html
Copyright © 2020-2023  润新知