最近发现一个有意思的问题,可以看看这两个的输出结果
1 | String.valueOf(map.get("key")) //① |
1 | String.valueOf(null) //② |
会发现map中①返回正常 ”null“字符串,而②抛出NLP异常
跳转到String类的valueOf发现使用的是这个重载的方法:
1 | public static String valueOf(char data[]) { |
再看看char[] string的构造方法:
1 | public String(char value[]) { |
null无length属性,到这里就会异常。
传入(Object)null时候(或者无key得时候map对象返回空对象),实现的是如下重载的方法:
1 | public static String valueOf(Object obj) { |
即正常返回 null字符串。
实际上null是关键字,不属于Object对象,至于选择器为什么会优先选择重载函数就得分析null和Object obj=null 中 null和obj的区别了。
版权声明:本文为博主原创文章,未经允许不得转载。