java String concatenation
I'm curious what is the difference between the two.
The way I understand the string pool is this:
This creates 3 string objects in the string pool, for 2 of those all references are lost.
String mystr = "str";
mystr += "end";
Doesn't this also create 3 objects in the string pool?
String mystr = "str";
mystr = mystr.concat("end")
I know StringBuilder and StringBuffer are much more efficient in terms of memory usage when there's lots of concatination to be done. I'm just curious if there's any difference between the + operator and concat in terms of memory usage.
+ operator could take any type of input and convert it to a string before append to the target string. The concat method would create new string object as output after appending only if output string has length greater than zero otherwise return the same target string as an output object.
concat() method takes only one argument of string and concatenates it with other string. + operator takes any number of arguments and concatenates all the strings.
"Concatenate" joins two specific items together, whereas "append" adds what you specify to whatever may already be there.
Java - String concat() Method This method appends one String to the end of another. The method returns a String with the value of the String passed into the method, appended to the end of the String, used to invoke this method.
There's no difference in this particular case; however, they're not the same in general.
str1 += str2
is equivalent to doing the following:
str1 = new StringBuilder().append(str1).append(str2).toString();
To prove this to yourself, just make a simple method that takes two strings and +=
's the first string to the second, then examine the disassembled bytecode.
By contrast, str1.concat(str2)
simply makes a new string that's the concatenation of str1
and str2
, which is less expensive for a small number of concatenated strings (but will lose to the first approach with a larger number).
Additionally, if str1
is null, notice that str1.concat(str2)
throws a NPE, but str1 += str2
will simply treat str1
as if it were null without throwing an exception. (That is, it yields "null" concatenated with the value of str2
. If str2
were, say, "foo", you would wind up with "nullfoo".)
Update: See this StackOverflow question, which is almost identical.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With