关于Java的字符串

我将总结一下Java中的String。

String的意思是

这是一个处理字符串的类。它可以像加法一样进行字符串的拼接操作,可能会让C语言转战而来的人感到惊喜。

public class Test {
    public static void main(String[] args) {
        String a = "aaa";
        a += "bbb";
        a += "ccc";
        System.out.println(a);
    }
}

String是一个不可变对象。

表面上看,它看起来像是可以像加法一样连接的String,但实际上它在内部进行了重新创建对象的处理。这是因为String是一种不可修改的不可变对象(Immutable Object)。以前的例子中,它实际上执行了以下操作。

public class Test {
    public static void main(String[] args) {
        String a = "aaa";
        a += "bbb"; // 『aaa』と『bbb』を結合させた文字列『aaabbb』を格納したStringを生成し、その参照をaに代入
        a += "ccc"; // 『aaabbb』と『ccc』を結合させた文字列『aaabbbccc』を格納したStringを生成し、その参照をaに代入
        System.out.println(a);
    }
}

字符串的复制

在Java中有浅拷贝和深拷贝的概念(详细信息请参考Java的clone方法正确的实现方法-Qiita),但是对于String来说,浅拷贝就足够了。这是因为String是不可变对象,即使引用了相同的对象,也不必担心改变其内容。

字符串的连接 (String concatenation)

字符串构建器

字符串生成器

StringBuilder是一种用于连接字符串的对象,它通过append方法将字符串存储在内部的char数组中,并通过toString方法将它们合并成一个String。我之前写的是在连接字符串时会重新创建String,但实际上是使用了这个StringBuilder。例如,上述代码实际上执行了以下操作。

public class Test {
    public static void main(String[] args) {
        String a = "aaa";
        a = (new StringBuilder(String.valueOf(a))).append("bbb").toString(); // 『aaa』と『bbb』を結合させた文字列『aaabbb』を格納したStringを生成し、その参照をaに代入
        a = (new StringBuilder(String.valueOf(a))).append("ccc").toString(); // 『aaabbb』と『ccc』を結合させた文字列『aaabbbccc』を格納したStringを生成し、その参照をaに代入
        System.out.println(a);
    }
}

根据查看此代码,我们可以发现每次连接都会生成一个StringBuilder。然而,考虑到累积后再连接的用法,我们可以发现以下形式更加有效。

public class Test {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("aaa");
        sb.append("bbb");
        sb.append("ccc");
        String a = sb.toString();
        System.out.println(a);
    }
}

字符串缓冲器

StringBuilder的线程安全版本是StringBuffer。用法与StringBuilder相同。

public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("aaa");
        sb.append("bbb");
        sb.append("ccc");
        String a = sb.toString();
        System.out.println(a);
    }
}

concat 方法

String中有一个名为concat的方法,可以将2个String连接在一起,用法如下。

public class Test {
    public static void main(String[] args) {
        String a = "aaa";
        a = a.concat("bbb"); // 『aaa』と『bbb』を結合させた文字列『aaabbb』を格納したStringを生成し、その参照をaに代入
        a = a.concat("ccc"); // 『aaabbb』と『ccc』を結合させた文字列『aaabbbccc』を格納したStringを生成し、その参照をaに代入
        System.out.println(a);
    }
}

在内部,执行了将两个字符串连接成一个String的操作。

灵活运用

如果需要合并多个字符串,使用StringBuilder(或StringBuffer)是更好的选择;如果只需要合并一次字符串,使用concat方法即可。

文献引用

    • スッキリわかるJava入門 実践編 第2版(中山 清喬・著)

 

    • Javaにおけるオブジェクトの複製(clone) – 浅いコピーと深いコピー

 

    • 参照についてもう少し詳しく ~PythonとJavaを例に~ – Qiita

 

    Stringの連結はそう簡単なものではない – じゅんいち☆かとうの技術日誌
广告
将在 10 秒后关闭
bannerAds