20
votes

I have the following code

System.out.println("" + null);

and the output is null.
How does Java do the trick in string concatenation?

3

3 Answers

29
votes

Because Java converts the expression "A String" + x to something along the lines of "A String" + String.valueOf(x)

In actual fact I think it probably uses StringBuilders, so that:

"A String " + x + " and another " + y

resolves to the more efficient

new StringBuilder("A String ")
    .append(x)
    .append(" and another ")
    .append(y).toString()

This uses the append methods on String builder (for each type), which handle null properly

8
votes

Java uses StringBuilder.append( Object obj ) behind the scenes.

It is not hard to imagine its implementation.

public StringBuilder append( Object obj )
{
   if ( obj == null )
   {
       append( "null" );
   }
   else
   {
       append( obj.toString( ) );
   }

   return this;
}
3
votes

The code "" + null is converted by the compiler to

new StringBuffer().append("").append(null);

and StringBuffer replaces null with the string "null". So the result is the string "null".