前言
众所周知 空指针这个异常是经常遇到的,最常见的bug,就算是大牛也不可避免,找这个问题着实让人头大
案例:
程序经常会用到 toString()方法,但是这样会造成很大的 java.lang.NullPointerException 风险
public static void main(String[] args) {
Object obj = null;
System.out.println("a=" + (String)null); // ① a=null
System.out.println("b=" + (String)obj); // ② b=null
System.out.println("c=" + String.valueOf(obj));// ③ c=null
System.out.println("d= "+ "".toString()); // ④ d=
System.out.println("e=" + String.valueOf(null)); // ⑤ java.lang.NullPointerException
System.out.println("f=" + String.valueOf("null")); //⑥ f=null
}
结论:
使用 强转 和 String.valueOf() 可以有效避免 java.lang.NullPointerException
疑问?
③和⑤ 不是一样吗?
这个还真不一样,String.valueOf()是一个重载方法
看String.valueOf(obj) 源码
-
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".toString();
}
-