java.lang.Object → java.lang.String
String str = (String)obj;
,即使用强转,从父类型Object向下转型为String。String str = obj.toString();
,即使用Object一定会存在的toString()方法。String str = String.valueOf(obj);
,即使用String类的静态方法,将一个Object类型的变量转成String类型对象。
由于不仅仅是String,所有类的共同父类都是Object,所以是可以向下转型的。
但是,如果obj实际上不是String类型的,会爆java.lang.ClassCastException的。
因此,如果非要用,建议使用 instanceof 先做一下判断吧。
这种方法的好处就是用这顺手、简单。
StrategyⅡtoString()是从Object类就有的方法,直接调用也很方便。
问题也很明显,最让人崩溃的 java.lang.NullPointerException 啊!
如果obj是null的话,直接一长串空指针……
StrategyⅢ这个方法比较神奇,因为它有9个重载方法(重载就是方法/函数同名,但参数列表个数或者类型不同):
- String.valueOf(boolean value): String
- String.valueOf(char value): String
- String.valueOf(char[] data): String
- String.valueOf(double value): String
- String.valueOf(float value): String
- String.valueOf(int value): String
- String.valueOf(long value): String
- String.valueOf(Object data): String
- String.valueOf(char[] data, int start, int length): String
使用的时候特殊情况是String.valueOf(null)
, 这时调用的是:String.valueOf(Object data)
。 (IDE中按住Ctrl就可以追溯引用了)
String.valueOf(Object data)的源码如下:
public static String valueOf(Object obj) {
return obj == null ? "null" : obj.toString();
}
最终并不会空指针,而是返回"null"
!
所以这种策略虽然不容易爆异常,但也可能得到不想要的结果,即"null",所以还是需要处理一下的。