2022.1.8Java の基礎 - 一般クラス

StringクラスとStringBuilder、StringBuffer

文字列クラス

生成された文字列は不変であり、その中には最終的に定義された char[] があるため、文字列が変更されるたびに、新しい String オブジェクトが実際に再生成されます。

ソースコードは次のとおりです。

コンパイル機能: コンパイラは、コンパイル中に変数に割り当てられた 2 つの定数文字列を結合します。

package com.demo.String;

public class TestString2 {
    public static void main(String[] args) {
        //编译器做了优化,直接在编译的时候将字符串进行了拼接
        String str1="hello"+"java"; //相当于str1=“hello java”
        String str2="hellojava";
        //str1与str2是同一对象,即证明了这一观点
        System.out.println(str1==str2);
        String str3="hello";
        String str4="java";
        //编译的时候编译器不知道变量里面是什么值,所以没办法在编译的时候优化
        String str5=str3+str4;
        System.out.println(str5==str2);
    }
}

StringBuffer と StringBuilder

StringBuffer: スレッド セーフ、スレッド同期チェック、低効率

StringBuilder: スレッドは安全ではありません、スレッド同期チェックなし、高効率、通常メソッドで使用されます、メソッドにはスレッドが関与しません

両者のソースコード設計構造はほぼ同じなので、使い方は全く同じです

package com.demo.String;

//测试字符串相关类
public class TsetString {
    public static void main(String[] args) {
        String s1 = new String("abcd");

        StringBuilder sb=new StringBuilder("ABC");
        // StringBuffer sbf=new StringBuffer("ABC");//效率低
        sb.append(",I can sing my abc!");
        sb.insert(0,"爱").insert(0,"我");//插入字符串
        System.out.println(sb);
        sb.delete(0,2);
        System.out.println(sb);
        sb.deleteCharAt(0).deleteCharAt(0);//删除某个字符
        System.out.println(sb.charAt(0));//获取某个字符
        System.out.println(sb.reverse());//字符串逆序

    }
}

 可変および不変シーケンスの使用上の落とし穴

 5000 個のオブジェクトを生成し、直接分割

おすすめ

転載: blog.csdn.net/qq_41302243/article/details/122377186