今天写代码的时候碰见一个有趣的现象。
现象
来看看下面的例子:
String str = null;
System.out.println(str);
System.out.println(str.length);
输出为:
从输出中看到字符串str为空,没有长度。
现在我们稍微改改代码:
String str = null;
String str2 = str+"123";
System.out.println(str2);
System.out.println(str2.length());
输出为:
可以看到,null的字符串在拼接的时候直接是变为“null”了,不仅数据有,长度也有了。
本质
两个字符串相加即是字符串的拼接,在进行拼接时,会先调用valueOf(Object obj)方法将其为字符串类型,再进行拼接。让我们看看valueOf的源码:
看到这个条件表达式就明白了,传入一个对象进来的时候,先对对象进行判断,如果是null就把对象转为“null”,否则就转为字符串类型的对象。