Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a difference between String concat and the + operator in Java? [duplicate]

Tags:

Duplicate

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.

like image 583
Vasil Avatar asked Mar 28 '09 21:03

Vasil


People also ask

What is the difference between concat and operator in Java?

+ 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.

What is the major difference between concat () method and operator no?

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.

What is the difference between concat and append in Java?

"Concatenate" joins two specific items together, whereas "append" adds what you specify to whatever may already be there.

What does string concat do in Java?

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.


1 Answers

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.

like image 200
John Feminella Avatar answered Sep 30 '22 18:09

John Feminella