Search code examples
javastringconstantscompiler-optimizationconstantfolding

Does Java Compiler include String Constant Folding?


I found out that Java supports constant folding of primitive types, but what about Strings?

Example

If I create the following source code

out.write(""
        + "<markup>"
        + "<nested>"
        + "Easier to read if it is split into multiple lines"
        + "</nested>"
        + "</markup>"
        + "");

What goes into the compiled code?

Combined Version? out.write("<markup><nested>Easier to read if it is split into multiple lines</nested></markup>");

Or the less efficient run-time concatenation version? out.write(new StringBuilder("").append("<markup>").append("<nested>").append("Easier to read if it is split into multiple lines").append("</nested>").append("</markup>").append(""));


Solution

  • Here's an easy test:

    public static void main(final String[] args) {
        final String a = "1" + "2";
        final String b = "12";        
    
        System.out.println(a == b);
    }
    

    Output:

    true
    

    So, yes, the compiler will fold.