发现一个奇怪的问题,求大神解释
TreeMap<String,Object> ttt = new TreeMap<String,Object>();
if(ttt.get("xxxx") == null){
System.out.println(String.valueOf(ttt.get("xxxx"))); //程序运行这里没报错
}
System.out.println(String.valueOf(null)); //程序运行这里报错了
主要还是String.valueOf函数的处理
https://stackoverflow.com/questions/3131865/why-does-string-valueofnull-throw-a-nullpointerexception
并没有错。你尝试clean,重新运行程序
下面一个写成System.out.println(String.valueOf((Object)null));就不会报错,上面没报错也是因为返回的null属于Object,就是这个意思。
前面的是一个对象,后面只是一个值,一个对象对应一个内存地址,前面你是转换一个名称为xxxx值为null对象,而后面你直接转换null此时的null为java中的一个关键字,不属于任何一个类型,null可以转化为任意类型,比如Integer a = null;那么此时那就是int类型
Map集合的value值是Object,而Object是java类中的基本对象,所以String.valueOf(map.get(key))相当于获取对象的字符串地址;而null是空,使用String.value(null)获取的当然是个异常,是个报错~~
String valueOf(Object obj)方法有参数返回规则,这里和你的问题一样,你可以参考一下:http://blog.csdn.net/u011450110/article/details/51026102
String valueOf(Object obj) 这个方法是把其他类型(基本数据类型和引用类型)的数据转换为String类型的数据,首先传null没有意义,强转Object不报错说明传null运行的时候JVM根本不知道传的什么东东啊!