https://kylewbanks.com/blog/java-string-concatenation-vs-stringbuilder-vs-string-format-performance
public class TestStrings { private static final String PROFILE_PICTURE_URL_BASE = "https://cdn.myapp.com/user/"; private static final String PROFILE_PICTURE_URL_EXTENSION = ".png"; private static final String PROFILE_PICTURE_URL = "https://cdn.myapp.com/user/%d.png"; private static final int NUM_ITERATIONS = 1000000; public static void main(String[] args) { int userId; long startTime; // String Concatentation startTime = System.currentTimeMillis(); for (userId = 0; userId < NUM_ITERATIONS; userId ++) { String profilePictureUrl = PROFILE_PICTURE_URL_BASE + userId + PROFILE_PICTURE_URL_EXTENSION; } System.out.println("String Concatentation: " + (System.currentTimeMillis() - startTime) + "ms"); // StringBuilder startTime = System.currentTimeMillis(); for (userId = 0; userId < NUM_ITERATIONS; userId ++) { StringBuilder sb = new StringBuilder(PROFILE_PICTURE_URL_BASE); sb.append(userId); sb.append(PROFILE_PICTURE_URL_EXTENSION); String profilePictureUrl = sb.toString(); } System.out.println("StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms"); // String.format startTime = System.currentTimeMillis(); for (userId = 0; userId < NUM_ITERATIONS; userId ++) { String profilePictureUrl = String.format(PROFILE_PICTURE_URL, userId); } System.out.println("String.format: " + (System.currentTimeMillis() - startTime) + "ms"); } }