Java用字面量和new String创建字符串的区别

例如,要创建一个Java字符串,下面两种方式都可以创建:

String str1 = "hello";
String str3 = new String("hello");

那么,这两种创建方式有什么区别呢?

  • 直接用字面量创建字符串:如果两个变量用了相同的字面量,那么这两个变量其实是引用了相同的对象,不会重复创建,所以效率高。
  • 而采用new String(String original)的方式创建:其实是将original的内容拷贝到一个新创建的对象中。除非明确需要original的拷贝,否则不建议采用这种方式。

代码示例:

package com.thb;

public class Demo4 {

    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        System.out.println("str1 == str2: " + (str1 == str2));
        System.out.println("str1.equals(str2): " + str1.equals(str2));
        
        String str3 = new String("hello");
        String str4 = new String("hello");
        System.out.println("str3 == str4: " + (str3 == str4));
        System.out.println("str3.equals(str4): " + str3.equals(str4));
    }

}

先看执行输出结果:

str1 == str2: true
str1.equals(str2): true
str3 == str4: false
str3.equals(str4): true

再用debug方式看看有什么区别:
Java用字面量和new String创建字符串的区别_第1张图片

从输出结果和debug可以看到:
str1和str2采用字面量的方式创建,因为它们用了相同的字面量,这两个变量指向了相同的对象。
而str3和st4采用new String(String original)的方式创建,尽管original相同,但str3和st4指向了不同的对象。

你可能感兴趣的:(java,开发语言)