欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Integer.valueof(null)报错

发布时间:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Integer.valueof(null)报错 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
原文  http://javacat360.iteye.com/blog/2024378 主题 Java 昨天,一同事问我一个问题,估计是他前段日子面试遇到的 
问题很简单,String.valueof(null)的返回值 
起初我想了想,应该是String类型的字面量null,可后来上机一试才发现原来返回空指针异常 
查看String源码,发现valueof方法被重载多次,其中String.valueof(null)却意外的进入了valueof(char[] data)方法,如下图所示 

valueof(char[] data)方法直接进入String构造器 
public static String valueOf(char data[]) {return new String(data); } 内部会获取char[]的length,因此返回空指针异常 
public String(char value[]) {this.value = Arrays.copyOf(value, value.length); } 为何众多的valueof重载方法没有选择别的,而选择了valueof(char[] data)呢,为什么不选valueof(object)呢? 
查阅了相关资料,发现stackoverflow上也有人提出过 
http://stackoverflow.com/questions/4042675/why-string-valueofnull-is-causing-null-pointer-exception 
大体意思就是在多个重载方法均能匹配的条件下,优先会选择精度高的那个,或者说范围小的那个,那上面的问题就明朗了,char[]是继承自object的(java中数组也是一种特殊的object),因此优先选择精度高的char[] 
例如: 
public static void main(String[] args) {test(null); //此处将返回arraylist,因为list同arraylist存在继承或实现的上下级关系 } static void test(List list) { System.out.println("list"); } static void test(ArrayList list) { System.out.println("arraylist"); } 又因为构造函数是编译时期确定的 
因此如下代码将无法通过编译,因为String同Integer不存在任何关系,他们都继承自Object,他们的公共父类是object(String和String[]也是一样的道理),因此无法通过编译 
public static void main(String[] args) {test(null); //本行会编译报错 } static void test(String str) { System.out.println("string"); } static void test(Integer num) { //如果修改为int,则编译通过 System.out.println("integer"); }

转载于:https://www.cnblogs.com/zl1991/p/5356450.html

总结

以上是生活随笔为你收集整理的Integer.valueof(null)报错的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。