Best practices/performance: mixing StringBuilder.a

2019-01-16 01:20发布

I'm trying to understand what the best practice is and why for concatenating string literals and variables for different cases. For instance, if I have code like this

StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
    .append(B_String).append("CCCCCCCCCCC").append(D_String)
    .append("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
    .append("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");

Is this the way to do it? From this post, I noticed that the + operator on Strings creates a new instance of StringBuilder, concatenates the operands, and returns a String conversion, which seems like a lot more work than just calling .append(); so if that's true, then that is out of the question. But what about String.concat()? Is it proper to use .append() for every concatenation? Or just for variables, and literals are okay to append with .concat()?

StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
    .append(B_String.concat("CCCCCCCCCCC")).append(D_String
    .concat("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
    .concat("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));

What are the general rules for best practices and performance for going about these situations? Is my assumption correct on + and it should really just not be used?

7条回答
等我变得足够好
2楼-- · 2019-01-16 02:02

If you concat exactly two Strings use String.concat (creates a new String by creating a new char-array that fits both Strings and copys both Strings' char arrays into it).

If you concat multiple (more than two) Strings in one line, use + or StringBuilder.append, it doesn't matter, since the compiler converts + to StringBuilder.append. This is good for multiple Strings because it maintains one char array that grows as needed.

If you concat multiple Strings over multiple lines create one StringBuilder and use the append-method. In the end when you are done appending Strings to the StringBuilder use it's .toString()-method to create a String out of it. For concatting in multiple lines this is faster than the second method, since the second method would create a new StringBuilder on each line, append the Strings and then cast back to String, while the third method only uses one StringBuilder for the whole thing.

查看更多
登录 后发表回答