This question already has answers here:
Why does String.valueOf(null) throw a NullPointerException?
(4 个回答)
5年前关闭。
我刚刚发现了一些有趣的东西。
输出
这正是我所期望的。
但是当我运行这个
输出
有两个被调用的 valueOf 的重载版本,它们是
我不明白为什么 valueOf(Object s) 方法对 null 给予特殊处理。
想法/评论?
但是在你的第二种情况下,你实际上传递了一个
所以只有
(4 个回答)
5年前关闭。
我刚刚发现了一些有趣的东西。
public class test {
public static void main(String a[])
{
System.out.println(String.valueOf(null).length());
}
}
输出
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.<init>(Unknown Source)
这正是我所期望的。
但是当我运行这个
public class test {
public static void main(String a[])
{
String s=null;
System.out.println(String.valueOf(s).length());
}
}
输出
4
有两个被调用的 valueOf 的重载版本,它们是
/**
* Returns the string representation of the <code>Object</code> argument.
*
* @param obj an <code>Object</code>.
* @return if the argument is <code>null</code>, then a string equal to
* <code>"null"</code>; otherwise, the value of
* <code>obj.toString()</code> is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
/**
* Returns the string representation of the <code>char</code> array
* argument. The contents of the character array are copied; subsequent
* modification of the character array does not affect the newly
* created string.
*
* @param data a <code>char</code> array.
* @return a newly allocated string representing the same sequence of
* characters contained in the character array argument.
*/
public static String valueOf(char data[]) {
return new String(data);
}
我不明白为什么 valueOf(Object s) 方法对 null 给予特殊处理。
想法/评论?
最佳答案
问题出在JLS的方法调用逻辑上。
JLS's Choosing the Most Specific Method 说,
现在,在您的第一种情况下,当您直接传递 null
时,
System.out.println(String.valueOf(null).length());
String.valueOf(Object)
和 String.valueOf(char[])
都适用......所以它使用 最具体的方法 ,它是一个 char[]
。但是在你的第二种情况下,你实际上传递了一个
String
即使它是空的。所以只有
String.valueOf(Object)
是适用的。关于java - 当我们传递一个空字符串时,String 的 valueOf 方法返回 4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32761535/
10-10 11:45