简体   繁体   中英

Concatenation of a null String object and a string literal

This is a follow-up question to some previous questions about String initialization in Java.

After some small tests in Java, I'm facing the following question:

Why can I execute this statement

String concatenated = str2 + " a_literal_string";

when str2 a String object initialized to null ( String str2 = null; ) but I cannot call the method toString() on str2 ? Then how does Java do the concatenation of a null String object and a string literal ?

By the way, I tried also to concatenate an Integer initialized to null and the string literal "a_literal_string" and I've got the same thing that is "null a_literal_string" in the console. So whichever kind of null gives the same thing?

PS : System.out.println(concatenated); gives null a_literal_string as output in the console.

This line:

String concatenated = str2 + " a_literal_string";

is compiled into something like

String concatenated = new StringBuilder().append(str2)
                                         .append(" a_literal_string")
                                         .toString();

This gives "null a_literal_string" (and not NullPointerException ) because StringBuilder.append is implemented using String.valueOf , and String.valueOf(null) returns the string "null" .

I tried also to concatenate an Integer initialized to null and the string literal "a_literal_string" and I've got the same thing

This is for the same reason as above. String.valueOf(anyObject) where anyObject is null will give back "null" .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM