项目中尝尝会用到String类型转换,一般常用三种方法,(String),toString,String.valueOf(),这三种方法虽然都能把Obj类转换成我们想要的String类型,但是其中仍然有区别,如果不了解的前提下在项目中随意滥用稍不注意就会造成差错,下面做下小笔记。
首先是(String)
将object类强制转成String类型的,需要注意的是输入的Object类型必须是能转成String类型,否则虽然语法检查上不会出错,实际运行会产生强制转换类型错误。
Object t1 = 1;
String t2 = (String)t1;
java.lang.ClassCastException: java.lang.Integer cannot be cast to
java.lang.String
toString方法
因为Object类原本就已经存在toString()方法,原则上任何java对象都可以调用该方法转成Stirng类。
Object t1 = new Object();
t1.toString();
这种方法写代码中经常会用到,因为用起来实在是很方便啊,随手点一下就完事了,虽然用起来开心快乐,但是需要注意如果Object类是null,此时会出现空指针异常。
Object t1 = new Object();
t1 = null;
t1.toString();
java.lang.NullPointerException
String.valueOf()方法
public static String valueOf(Object obj)
静态方法,直接通过String调用。
查看源码就可以知道这个方法内部做了判断,实际上是对第二种方式的升级版。
public static String valueOf(Object var0) {
return var0 == null ? "null" : var0.toString();
}
看起来很完美,但是,着重注意通过这个方法输出的null是<<字符串null,并不是null>>。
String t1 = null;
String t2 = String.valueOf(t1);
System.out.println(t2);
System.out.println(t2.getClass());
输出结果
null
class java.lang.String
很明显null通过转换后变成了字符串,此时如果项目中使用的是org.apache.commons.lang这类的StringUtils.isEmpty方法来判断是否有值,就会造成误判。
String t1 = null;
String t2 = String.valueOf(t1);
System.out.println(StringUtils.isEmpty(t1));
System.out.println(StringUtils.isEmpty(t2));
输出结果
true
false
相比前面两种方法,使用String.valueOf()虽然麻烦点,但是更加安全,但是特别要注意对null值的判断。

timg.gif
