この記事の例では、Java での文字列の使用法を要約します。皆さんの参考に共有してください。具体的な分析は次のとおりです。
文字列の本質は char 型の配列ですが、Java では二重引用符 "" で宣言されたすべての文字列は String クラスのオブジェクトです。これは、Java の完全なオブジェクト指向言語の特性も反映しています。
文字列クラス
1. String クラス オブジェクトは定数文字列を表します。これは不変の長さです。つまり、String クラスのインスタンスが作成されると、このインスタンスによって表される文字列は変更できません。に似ている
str = str + "こんにちは";
この操作は基本的に、2 つの String オブジェクト str と "Hello" を組み合わせて新しい String オブジェクトを作成し、新しい String オブジェクトの参照を str に割り当てます。この操作を多用すると、パフォーマンスに欠陥が生じる可能性があります。文字列の内容を頻繁に変更する必要がある場合は、StringBuffer クラスまたは StringBuilder クラスを使用する必要があります。小さなプログラムを使用して、String クラスと StringBuffer クラスのパフォーマンスの違いがどれくらい大きいかを確認できます。
class StringTest { public static void main(String[] args) { /** * String オブジェクトと StringBuffer オブジェクトをそれぞれ使用して 10,000 回の追加操作を実行します * テスト実行時間 * 2013.3.18 */ String constStr = "" long lTime = System ; currentTimeMillis(); for(int i = 0; i < 10000; ++i) constStr += i; System.out.println("Const String:"+(System.currentTimeMillis()-lTime)); StringBuilder strBuf = new StringBuilder(""); lTime = System.currentTimeMillis(); 10000 ; ++i) strBuf.append(String.valueOf(i));文字列: "+(System.currentTimeMillis()-lTime)); } }実行結果:
StringBuilder には数秒かかりますが、String クラスには 300 ミリ秒かかり、パフォーマンスに大きな違いがあることがわかります。
StringBuilder と StringBuffered はどちらも可変長 (可変) 文字列オブジェクトを表します。これらの違いは、StringBuffered クラスがスレッド同期に関して安全な処理を行うのに対し、StringBuilder はその逆を行うことです。したがって、単一行でプログラミングするだけの場合は、StringBuilder の方が StringBuffered よりもわずかに効率的です (実際には、その差は大きくありません)。
2. 「Hello World」は String オブジェクトです。次のように、「Hello World」をオブジェクトとして直接使用できます。
if("Hello".equals("Hello")) System.out.println("Yes");出力結果は「はい」となります。
3. 文字列オブジェクトを比較する場合は、単に == を使用して判断するのではなく、equals() メソッドを使用する必要があります。 == は 2 つの参照名によって参照されるインスタンスが同じかどうかを比較するため、equals() メソッドは 2 つのオブジェクト内の文字列が等しいかどうかを比較します。
よくある質問は、次のコード スニペットが合計でいくつの String オブジェクトを生成するかということです。
String str1 = new String("Hello");String str2 = new String("Hello");おそらくほとんどの人は「2」と答えるでしょう。しかし実際には、ここでは合計 3 つの String オブジェクトが生成されます。 str1 と str2 に加えて、「Hello」も String オブジェクトであることを忘れないでください。
4. ストリングプール(プール)
Java は実行時に文字列プールを維持します。二重引用符で宣言された文字列が出現すると、JVM はまず同じ String オブジェクト (同じ文字を持つ) がメモリ内に存在するかどうかを確認し、存在する場合はメモリ内に既に存在するオブジェクトへの参照を返します。存在しない場合は、新しい String オブジェクトを作成します。これによりメモリが節約されます。次のコードに示すように、str1 と str2 は実際には同じ String オブジェクトを指します。
文字列 str1 = "こんにちは";文字列 str2 = "こんにちは";
5. コマンドラインパラメータを受け取る
main メソッドを宣言するとき、String[] 型の仮パラメータを宣言します。この String オブジェクトの配列には、このプログラムの実行時にユーザーによって渡されたコマンド ライン パラメーターが格納されます。 C 言語とは異なり、Java のコマンド ライン パラメータはプログラム名の後の最初の変数から始まることに注意してください。つまり、String[] データにはアプリケーション名が含まれません。例えば:
class strCmd { public static void main(String[] args) { if(args.length > 0) { for(String str : args) System.out.println(str); } }java strCmd Hello World! を実行したときの出力は次のとおりです。
6. 文字列の分離
C言語のstrtokと同様に、Stringクラスにも指定した形式で文字列を分割できるsplitメソッドがあります。 Split メソッドは、分割された各文字列を表す String オブジェクトの配列を返します。のように:
class strSplit { public static void main(String[] args) { String str = "Hello/tWorld/tI/tLove/tYou!"; System.out.println("元の文字列 : " + strArr); str.split("/t"); for(String s : strArr) System.out.println(s);このうち、split() メソッドのパラメータには正規表現を使用できます。 java.util パッケージの Matcher クラスの静的メソッドmatches()を使用して、文字列が正規表現と一致するかどうかを判断できます。
String クラスには他にも多くの強力な関数があるため、API ドキュメントを読むことを学ぶ必要があります。ここにも英語の重要性が反映されています...
この記事が皆さんの Java プログラミングに役立つことを願っています。