null与字符串拼接问题

来源:互联网 发布:工作任务软件 编辑:程序博客网 时间:2024/05/22 15:08

昨天写代码的时候发现了个挺有趣的问题:

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"和字符串拼接;




0 0
原创粉丝点击