Java で文字列を連結する

Rupam Yadav 2023年10月12日
  1. 演算子 + は複数の型の値を連結できるが、concat()String の値しか連結できない
  2. 値が空なら + は新しい String を生成し、concat() は同じ値を返す
  3. +null を連結するが、concat() は例外をスローする
  4. 複数の値を連結することができるが、concat() は一つの値しか取れない
Java で文字列を連結する

今日は、concat()+ 演算子の違いを見ていきます。どちらも Strings を連結するために使われますが、ここでは両者の違いを見ていきましょう。

演算子 + は複数の型の値を連結できるが、concat()String の値しか連結できない

まず、+concat() の大きな違いは、+ 演算子を使って複数のデータ型を String で連結することができますが、concat() メソッドは String 型の値のみを取得することに制限されている点です。

+ を使って値を結合する際には、toString() メソッドを使って String 型の値に変換されます。

以下の例は、int bString a に結合できることを示しています。しかし、これを concat() で試してみると、int 型の値を取ることができないため、ランタイムエラーが発生します。

package com.company;

public class Main {
  public static void main(String[] args) {
    String a = "String A-";
    int b = 5;

    System.out.println(a + b);
  }
}

出力:

String A-5

値が空なら + は新しい String を生成し、concat() は同じ値を返す

次に注意すべき大きな違いは、+ は値を取得するたびに新しい String を生成し、その長さが 0 であっても、その値の長さが 0 であっても、新しい文字列を生成するということです。しかし、concat() は値の長さが 0 よりも大きい場合にのみ新しい文字列を生成します。

これは、以下で行ったように 2つの文字列を比較したい場合に結果を大きく変える可能性があります。最初の比較は文字列を concat() で連結したときに行われ、2 番目の比較は + で連結した 2つの文字列を比較した結果を示しています。

package com.company;

public class Main {
  public static void main(String[] args) {
    String a = "String A";
    String b = "";

    String d = a.concat(b);
    if (d == a) {
      System.out.println("String d and a are equal using concat");
    } else {
      System.out.println("String d and a are NOT equal using concat");
    }

    String e = a + b;
    if (e == a) {
      System.out.println("String e and a are equal using plus operator");
    } else {
      System.out.println("String e and a are NOT equal plus operator");
    }
  }
}

出力:

String d and a are equal using concat
String e and a are NOT equal plus operator

+null を連結するが、concat() は例外をスローする

下の例では、変数 bnull で初期化してもエラーなく連結されることがわかります。これは、+ 演算子がすべての値を String に変換して結合するためです。

package com.company;

public class Main {
  public static void main(String[] args) {
    String a = "String A-";
    String b = null;

    System.out.println(a + b);
  }
}

出力:

String A-null

+ とは異なり、null を含む ba に連結したときに NullPointerException をスローします。

package com.company;

public class Main {
  public static void main(String[] args) {
    String a = "String A-";
    String b = null;

    System.out.println(a.concat(b));
  }
}

出力:

Exception in thread "main" java.lang.NullPointerException
	at java.base/java.lang.String.concat(String.java:1937)
	at com.company.Main.main(Main.java:14)

複数の値を連結することができるが、concat() は一つの値しか取れない

演算子 + は、以下の例のように複数の値を結合することができます。しかし、concat() 関数は引数を 1つしか取らないので、2つ以上の値を連結することはできません。

package com.company;

public class Main {
  public static void main(String[] args) {
    String a = "String A-";
    String b = "String B-";
    String c = "String C";

    System.out.println(a + b + c);

    System.out.println(a.concat(b));
  }
}

出力:

String A-String B-String C
String A-String B-
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java String