Javaでのconcat()と+演算子の違い
この記事では、これらの違いについて説明します。 concat()
メソッドと +
Javaの演算子。
Java では、文字列を連結する 2 つの方法が提供されています。 concat()
メソッドと +
オペレーター。どちらも慣れています 2 つ以上の文字列を結合する そして結果として新しい文字列を返します。ただし、それらには理解する必要のあるいくつかの違いとトレードオフがあります。
1. 概要 concat()
方法
The concat()
メソッドとは、 String
ある文字列を別の文字列の末尾に連結するクラス。このメソッドは、引数として渡された文字列の値を、メソッドが呼び出された文字列の末尾に追加した新しい文字列オブジェクトを返します。たとえば、2 つの文字列を連結するには "Hello"
と "World"
、 我々は書ける:
1 2 3 4 5 6 7 8 |
class Main { public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; String s = s1.concat(s2); System.out.println(s); // HelloWorld } } |
The concat()
メソッドは次の型の引数を 1 つだけ取ることができます String
、そしてそれはスローします NullPointerException
引数が次の場合 null
。例えば:
1 2 3 4 5 6 7 8 |
class Main { public static void main(String[] args) { String s1 = "Hello"; String s2 = null; String s = s1.concat(s2); // NullPointerException System.out.println(s); } } |
The concat()
このメソッドは元の文字列を変更しませんが、結果として新しい文字列オブジェクトを作成します。したがって、プログラムのメモリ使用量やパフォーマンスに大きな影響を与えることはありません。ただし、これは、次の結果を割り当てる必要があることも意味します。 concat()
メソッドを新しい変数に追加するか、直接使用します。そうしないと、変数は失われます。例えば:
1 2 3 4 5 6 7 8 |
class Main { public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; s1.concat(s2); // 無効 System.out.println(s1); // "こんにちは" } } |
The concat()
このメソッドは一度に 2 つの文字列のみを連結できます。 3 つ以上の文字列を連結するには、複数の文字列を使用する必要があります。 concat()
メソッドを使用するか、かっこを使用してグループ化します。例えば:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Main { public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; String s3 = "!"; String s4 = s1.concat(s2).concat(s3); System.out.println(s4); // こんにちは世界! String s5 = s1.concat(s2.concat(s3)); System.out.println(s5); // こんにちは世界! String s6 = s1.concat((s2.concat(s3))); System.out.println(s6); // こんにちは世界! } } |
2. 概要 +
オペレーター
The +
演算子は、算術加算、文字列連結、単項プラスなど、さまざまな目的に使用できる Java の組み込み演算子です。文字列と一緒に使用すると、 +
演算子はどちらかの側の文字列を連結し、結果として新しい文字列オブジェクトを返します。たとえば、2 つの文字列を連結するには "Hello"
と "World"
、 我々は書ける:
1 2 3 4 5 6 7 8 |
class Main { public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; String s = s1 + s2; System.out.println(s); // HelloWorld } } |
The +
演算子は任意の数の引数を受け取り、それらをすべて連結できます。また、任意のタイプの引数を受け取り、それらを連結する前に文字列に変換することもできます。オブジェクトが渡されると、 +
演算子、それは文字列に変換されます toString()
そのオブジェクトのメソッド。 null参照変数がに渡された場合 +
演算子、文字列に変換されます "null"
。例えば:
1 2 3 4 5 6 7 8 9 10 |
class Main { public static void main(String[] args) { String s = "Hello"; int n = 42; boolean b = true; char c = '!'; String str = s + n + b + c; System.out.println(str); // こんにちは42true! } } |
すべてのプリミティブ型 (int
, char
, double
、 また float
) は、関連付けられた Wrapper クラス (Integer
, Character
, Double
, Float
)。コンパイラは、プリミティブ型から文字列に直接変換することにより、ラッパーオブジェクトの作成を最適化する場合があることに注意してください。
繰り返される文字列連結のパフォーマンスを向上させるために、Javaコンパイラは StringBuilder クラス 中間文字列オブジェクトの総数を減らすため。したがって、 String a = a + b + c;
と同等です String a = new StringBuilder(a).append(b).append(c).toString();
3. 両者の違い concat()
メソッドと +
Javaの演算子
The concat()
メソッドと +
オペレーターは両方とも慣れています Javaで文字列を連結する、しかし、それらには理解する必要のあるいくつかの違いとトレードオフがあります。
- The
concat()
メソッドとは、String
授業中、+
演算子は Java の組み込み演算子です。 - The
concat()
メソッドは String 型の引数を 1 つだけ取ることができますが、+
演算子は、任意の型の任意の数の引数を取ることができます。 - The
concat()
メソッドはNullPointerException
引数が null の場合、+
引数が null の場合、演算子は例外をスローしません。 - The
concat()
メソッドは一度に 2 つの文字列のみを連結できますが、+
演算子は一度に任意の数の文字列を連結できます。 - The
concat()
メソッドは内部で超高速を使用しますSystem.arraycopy()
文字列連結にはメソッドを使用しますが、Java コンパイラはStringBuffer
複数の文字列を連結するためのクラス+
オペレーター。
4. いつ、何を使用しますか?
これまで見てきたように、 concat()
メソッドと +
演算子はどちらも Java で文字列を連結するのに便利なメソッドです。これらの中から選択する場合の一般的な推奨事項をいくつか示します。
- 任意のタイプの複数の文字列を連結する必要がある場合は、
+
オペレーター。このメソッドを使用すると、任意の数の引数を連結し、連結する前に文字列に変換できます。ただし、このメソッドを繰り返し使用する場合や大きな文字列を使用する場合は特に、このメソッドのメモリ使用量とパフォーマンスへの影響にも注意する必要があります。 - String 型の複数の文字列を連結する必要がある場合は、
concat()
方法。このメソッドは、必要な場合にのみ新しい文字列オブジェクトを作成し、不必要なメモリ割り当てを回避します。ただし、このメソッドを使用する場合は、NULL 文字列にも注意する必要があります。
一般に、次のように使用できます。 +
操作の総数が少ない場合は演算子 StringBuilder
合計操作数が多い場合のクラス。両者の違いについては以上です。 concat()
メソッドと +
Javaの演算子。