Java 带Null的字符串连接

Java 带Null的字符串连接,java,string,Java,String,我有以下代码 System.out.println("" + null); 并且输出为空。 Java是如何实现字符串连接的?因为Java将表达式A string+x转换为字符串+string.valueOfx 事实上,我认为它可能使用StringBuilder,因此: "A String " + x + " and another " + y 决心提高效率 new StringBuilder("A String ") .append(x) .append(" and anot

我有以下代码

System.out.println("" + null);
并且输出为空。
Java是如何实现字符串连接的?

因为Java将表达式A string+x转换为字符串+string.valueOfx

事实上,我认为它可能使用StringBuilder,因此:

"A String " + x + " and another " + y
决心提高效率

new StringBuilder("A String ")
    .append(x)
    .append(" and another ")
    .append(y).toString()
这对每种类型都使用字符串生成器上的append方法,这些方法正确地处理null

Java在幕后使用StringBuilder.append对象obj

不难想象它的实施

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

   return this;
}
编译器将代码+null转换为

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

StringBuffer将null替换为字符串null。因此,结果是字符串null。

IIRC,它实际上没有找到string.valueOfy。对于每种可能的类型都有StringBuilder.append的重载,appendObject直接处理null。你可以用它来替换,我想可能是吧。是的,恐怕我是老斯库尔了,从字符串连接不好的那一天开始!刚刚检查了appendObject的代码,实际上它将委托给String.valueOf。但在方法内部。因此,他们归结为相同的呼吁。只是一个小的修正;现在是StringBuilder而不是StringBuffer。在构建器的生命周期内,线程安全与字符串连接无关。为什么要/需要写+null而不是null?这个例子只是为了学术练习吗?@user46874:我想这一定是一个实验,看看空值是如何被打印出来的。链接到实现: