Skip to content

string concatenation

String concatenation in Java refers to combining two or more strings into a single string. Java provides multiple ways to perform string concatenation, and each has its specific use cases and performance characteristics.


1. Using the + Operator

The + operator is the simplest and most commonly used method for string concatenation in Java.

Syntax:

String result = “Hello” + ” ” + “World!”;

Example:

String str1 = “Hello”;

String str2 = “World”;

String result = str1 + ” ” + str2;

System.out.println(result); // Output: Hello World

Characteristics:

  • Ease of Use: Very intuitive and readable.
  • Performance: Internally uses a StringBuilder to concatenate, which can lead to suboptimal performance in loops.

2. Using the concat() Method

The String class provides the concat() method to concatenate strings.

Syntax:

String result = str1.concat(str2);

Example:

String str1 = “Hello”;

String str2 = “World”;

String result = str1.concat(” “).concat(str2);

System.out.println(result); // Output: Hello World

Characteristics:

  • Null-Safety: Throws a NullPointerException if the argument is null.
  • Efficiency: Slightly faster than the + operator for concatenating two strings.

3. Using StringBuilder or StringBuffer

StringBuilder and StringBuffer are classes designed for efficient string concatenation, especially in scenarios where multiple concatenations occur (e.g., in loops).

Syntax:

StringBuilder sb = new StringBuilder();

sb.append(str1).append(” “).append(str2);

Example with StringBuilder:

StringBuilder sb = new StringBuilder(“Hello”);

sb.append(” “).append(“World”);

System.out.println(sb.toString()); // Output: Hello World

Example with StringBuffer:

StringBuffer sb = new StringBuffer(“Hello”);

sb.append(” “).append(“World”);

System.out.println(sb.toString()); // Output: Hello World

Characteristics:

  • StringBuilder: Not thread-safe but faster for single-threaded environments.
  • StringBuffer: Thread-safe (synchronized) but slower due to overhead.
  • Efficient: Best for concatenating strings in loops.

4. Using String.format()

The String.format() method provides a way to concatenate strings using a format specifier.

Syntax:

String result = String.format(“Hello %s”, str2);

Example:

String str1 = “Hello”;

String str2 = “World”;

String result = String.format(“%s %s”, str1, str2);

System.out.println(result); // Output: Hello World

Characteristics:

  • Readability: Great for creating well-structured output.
  • Flexibility: Allows formatting like padding, precision, etc.
  • Performance: Slower compared to other methods.

5. Using join() (Java 8+)

The String.join() method allows concatenating multiple strings with a delimiter.

Syntax:

String result = String.join(delimiter, str1, str2, …);

Example:

String result = String.join(” “, “Hello”, “World”);

System.out.println(result); // Output: Hello World

Characteristics:

  • Convenient: Ideal for joining strings with a common delimiter.
  • Modern: Available since Java 8.

6. Using Collectors.joining() (Java 8+ Streams)

For joining strings from collections or streams, Collectors.joining() can be used.

Syntax:

String result = list.stream().collect(Collectors.joining(delimiter));

Example:

List<String> words = Arrays.asList(“Hello”, “World”);

String result = words.stream().collect(Collectors.joining(” “));

System.out.println(result); // Output: Hello World

Characteristics:

  • Advanced: Designed for working with streams.
  • Customizable: Can specify prefix and suffix in addition to the delimiter.

Performance Comparison

MethodBest ForPerformance
+ operatorSimple and small concatenationsSlower in loops due to object creation.
concat()Concatenating two stringsFaster than + for fewer strings.
StringBuilder/StringBufferRepeated or looped concatenationsBest performance for many concatenations.
String.format()Readable formattingSlower due to formatting overhead.
String.join()Joining multiple strings with delimiterEfficient for multiple strings.
Collectors.joining()Joining strings from collectionsBest for collections and streams.

Example: Concatenation in a Loop

Inefficient (Using +):

String result = “”;

for (int i = 0; i < 5; i++) {

    result += i + ” “;

}

System.out.println(result); // Output: 0 1 2 3 4

This creates multiple String objects, which is inefficient.

Efficient (Using StringBuilder):

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 5; i++) {

    sb.append(i).append(” “);

}

System.out.println(sb.toString()); // Output: 0 1 2 3 4


Best Practices

  1. Use the + operator or concat() for simple concatenations.
  2. Use StringBuilder for dynamic or iterative concatenations.
  3. Use String.join() or Collectors.joining() when working with collections.
  4. Avoid using String.format() in performance-critical code.

By choosing the right method based on the context, you can achieve optimal performance and readability in your Java applications.