在java项目的实际开发和应用中常常需要用到将对象转为String这一基本功能本文将对常用的转换方法进行一个总结常用的方法有Object#toString()(String)要转换的对象StringvalueOf(Object)等下面对这些方法一一进行分析
方法采用 Object#toString()方法
请看下面的例子
Object object = getObject();
Systemoutprintln(objecttoString());
在这种使用方法中因为javalangObject类里已有public方法toString()所以对任何严格意义上的java对象都可以调用此方法但在使用时要注意必须保证object不是null值否则将抛出NullPointerException异常采用这种方法时通常派生类会覆盖Object里的toString()方法
方法采用类型转换(String)object方法
这是标准的类型转换将object转成String类型的值使用这种方法时需要注意的是类型必须能转成String类型因此最好用instanceof做个类型检查以判断是否可以转换否则容易抛出CalssCastException异常此外需特别小心的是因定义为Object 类型的对象在转成String时语法检查并不会报错这将可能导致潜在的错误存在这时要格外小心如
Object obj = new Integer();
StringstrVal = (String)obj;
在运行时将会出错因为将Integer类型强制转换为String类型无法通过但是
Integer obj = new Integer();
StringstrVal = (String)obj;
如是格式代码将会报语法错误
此外因null值可以强制转换为任何java类类型(String)null也是合法的
方法采用StringvalueOf(Object)
StringvalueOf(Object)的基础是Object#toString()但它与Object#toString()又有所不同在前面方法的分析中提到使用后者时需保证不为null但采用第三种方法时将不用担心object是否为null值这一问题为了便于说明问题我们来分析一下相关的源代码Jdk里String# valueOf(Object)源码如下
/**
* Returns the string representation of the Object argument
*
* @param obj an Object
* @returnif the argument is null then a string equal to
*null; otherwise the value of
*objtoString() is returned
* @see javalangObject#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? null : objtoString();
}
从上面的源码可以很清晰的看出null值不用担心的理由但是这也恰恰给了我们隐患我们应当注意到当object为null时StringvalueOf(object)的值是字符串null而不是null!!!在使用过程中切记要注意试想一下如果我们用 if(StringvalueOf(object)==null){Systemoutprintln(传入的值是null!);}这样的语句将可能会发生什么问题再想一下向控制台输出时在视觉上如下语句在执行的结果上有什么不同
Systemoutprintln(StringvalueOf(null));
Systemoutprintln(null);
我们看到的输出将是一模一样的东西null但它们意义相同吗?