昨天写代码的时候发现了个挺有趣的问题:
public static void main(String[] args)throws Exception{
String str="test test";
byte[] data=str.getBytes();
File file = new File(null+"");
if(!file.exists()){
file.createNewFile();
}
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
out.write(data);
} finally {
if (out != null) {
out.close();
}
}
System.out.print(file.getAbsolutePath());
}
这段代码竟然没有报这个异常:Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
还打印出了正常结果:
E:\IDEA\study\null
于是就有了下面这一段代码:
public static void main(String[] args){
String str=null;
System.out.println(str);
String str1=str+"";
System.out.println(str1);
System.out.println(str1.equals(str));
System.out.println(str1.equals(""));
System.out.println(str1.equals(null));
System.out.println(str1.equals("null"));
}
打印结果:
null
null
false
false
false
true
s = s+""; 等价于 s = String.valueOf(s)+"";
看String源码得知:
/**
* Returns the string representation of the {@code Object} argument.
*
* @param obj an {@code Object}.
* @return if the argument is {@code null}, then a string equal to
* {@code "null"}; otherwise, the value of
* {@code obj.toString()} is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
null与字符串拼接的时候,相当于"null"和字符串拼接;