【发布时间】:2011-05-11 02:27:08
【问题描述】:
我有以下代码
System.out.println("" + null);
输出为null。
Java 是如何实现字符串连接的?
【问题讨论】:
我有以下代码
System.out.println("" + null);
输出为null。
Java 是如何实现字符串连接的?
【问题讨论】:
因为 Java 将表达式 "A String" + x 转换为类似于 "A String" + String.valueOf(x) 的内容
实际上我认为它可能使用StringBuilders,所以:
"A String " + x + " and another " + y
解决效率更高
new StringBuilder("A String ")
.append(x)
.append(" and another ")
.append(y).toString()
这使用了 String builder 上的 append 方法(针对每种类型),它可以正确处理 null
【讨论】:
String.valueOf(y)。每种可能的类型都有StringBuilder.append 的重载,append(Object) 直接处理 null。不过,您可以将“我认为它可能”替换为“它”。
append(Object) 的代码,它实际上委托给String.valueOf()。 Inside 方法。所以他们归结为相同的调用。
Java 在幕后使用StringBuilder.append( Object 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”。
【讨论】:
"" + null 而不仅仅是"null"?这个例子只是为了学术练习吗?