java String.valueOf(null)为啥会报空指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java String.valueOf(null)为啥会报空指针相关的知识,希望对你有一定的参考价值。

该方法的源码是

public static String valueOf(Object obj)
return (obj == null) ? "null" : obj.toString();

传入null为什么会报错呢

参考技术A Object o = null;
String a = String.valueOf(o);
//这样的调用是没有问题的,调用的实现是你描述的实现。

String b = String.valueOf(null);
这样调用的话默认调用的实现是:
public static String valueOf(char data[])
return new String(data);

所以会报错的

valueOf有多个重载方法的追问

还真是这样,忘了重载方法了。为什么传入null的时候会默认调用 String valueOf(char data[])这个方法呢。

本回答被提问者和网友采纳
参考技术B 一、null是代表不确定的对象
Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。
二、null本身不是对象,也不是Objcet的实例
所以如果你真的要传null 最好还是 String.valueOf((Object)null);

String.valueOf(null);如果直接传值null则会之间进入
public static String valueOf(char data[])
return new String(data);
参考技术C 最好把异常信息贴出来,我这里运行没有问题 参考技术D 你怎么调用的,代码贴一下

java 中的valueOf方法和强转

case1:Object 对象转String

需要强调的是String.valueOf()方法,当参数为类型是object,且值时null的时候他的处理方式

    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

这样在后面的成都不会报错但是在逻辑上可能出错,一般习惯写的是str!=null && str.length()>0

当是由 str = String.valueOf(obj)得到时上面的额判断条件就有问题了

所以遇到 Object 对象转String 最好强转 str=  (String) obj此时,当obj为null时,str依然为null

 

case2:Object 装基本类型的包装类型,(关注integer和Long,Double)

首先 obj被赋值之后 obj还是属于数据所属基本类型的包装类型可以通过instanceOf 判断知道.

所以直接用强转就可以,没有必要用类似Long.ParseLong(String.valueOf(obj))这类方法,用这中复杂的问题会有一个问题就是不能返回值不能包含null

如果是null就直接抛出异常了,因为在String.valueOf()方法时已经把null转为字符串了,而Long.parseLong()方法如果传入了null字符串就会报异常,

Long.ParseLong(String.valueOf(obj)) 方法就等价与 (long)obj,用基本类型去强转

更好的做法是用(Long)obj去强转,在后面的程序中做null情况的判断和处理

case3: 基本类型的包装类型和String的vlaueOf方法对与obj=null的处理是不一样的,String.valueOf(obj)的处理返回的"null"字符串,而基本类型的包装类型返回的null

强调一下,String不是基本类型,更不是基本包装类型

总结:1遇到obj类型转string时最好强转

2遇到obj类型转几倍类型的包装类型时最好强转,如果需要可以先用instanceOf判断其类型时再强转

 



以上是关于java String.valueOf(null)为啥会报空指针的主要内容,如果未能解决你的问题,请参考以下文章

Java char int 转换/char[]char数组 字符串 转换 String.valueOf/Arrays.sort/int[]数组初始0/Integer[]数组初始null

为啥 String.valueOf(null) 会抛出 NullPointerException?

Java中String字符串toString()String.valueOf()String强转+ ""的区别

String.valueOf 的坑

java 判断int类型为空

三种String的转换 String.valueOf String强转 toString使用区别