(String)java
毫无疑问,这种就是强转形式,简单方便,效率高。java程序员可能看到效率高或许有些激动,可是它有他的很差,那就是局限性。在java的世界里没有什么东西是没有缺点的,总有一些好的方面同时也有一些很差的。很差的就是,他只能是强转本来就是字符串的东西,若是本来不是字符串的话,那么就会报错。好比:程序员
Boolean boolean1 = true; String str3 = (String)boolean1;//这行代码会报错,编译不过 String str4 = boolean1.toString();//正常 String str5 = String.valueOf(boolean1);//正常
这是标准的类型转换,将object转成String类型的值。使用这种方法时,须要注意的是类型必须能转成String类型。所以最好用instanceof作个类型检查,以判断是否能够转换。不然容易抛出CalssCastException异常。此外,需特别当心的是因定义为Object 类型的对象在转成String时语法检查并不会报错,这将可能致使潜在的错误存在。这时要格外当心。this
如:指针
Object obj = new Integer(100); String strVal = (String)obj; // 这里编译不会报错,但在运行时会报错
在运行时将会出错,由于将Integer类型强制转换为String类型,没法经过。code
可是,对象
Integer obj = new Integer(100); String strVal = (String)obj; // 这里编译便会提示错误Cannot cast from Integer to String
如是格式代码,将会报语法错误。此外,因null值能够强制转换为任何java类类型,(String)null也是合法的。文档
经过上面的例子咱们就很清晰的明白了,String强转的方式当然轻松,可是它是有很大的局限性的。在用的时候要谨慎。字符串
toString()get
源码源码
/** * This object (which is already a string!) is itself returned. * * @return the string itself. */ public String toString() { return this; }
在API文档中是这样说的,返回此对象自己(它已是一个字符串了!!!)。按照它的意思就是说通常的对象或者参数都是有toString()的方法的,只是要注意在一个参数定义为int类型是就没有这个方法了。还有就是当参数为空的时候.toString()方法就会报出空指针异常,这是这个方法的很差的地方使用时须要仔细斟酌一下。好比:
Object obj = getObject(); Syystem.out.println(obj.toString());
就如这上面的代码表示的同样,若是obj不为空,那么就能正常编译,那么若是obj取出来为空的话,那么就会报出空指针异常的。
在这种使用方法中,由于java.lang.Object类里已有public方法.toString(),因此对任何严格意义上的java对象均可以调用此方法。但在使用时要注意,必须保证object不是null值,不然将抛出NullPointerException异常。采用这种方法时,一般派生类会覆盖Object里的toString()方法。
String.valueOf()
/** * Returns the string representation of the <code>Object</code> argument. * * @param obj an <code>Object</code>. * @return if the argument is <code>null</code>, then a string equal to * <code>"null"</code>; otherwise, the value of * <code>obj.toString()</code> is returned. * @see java.lang.Object#toString() */ public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
从上面的源码能够很清晰的看出null值不用担忧的理由。可是,这也偏偏给了咱们隐患。咱们应当注意到,当object为null 时,String.valueOf(object)的值是字符串”null”,而不是null!!!在使用过程当中切记要注意。
试想一下,若是咱们用
if(String.valueOf(object)==null){System.out.println(“传入的值是null!”);}
这样的语句将可能会发生什么问题。再想一下,向控制台输出时,在视觉上以下语句在执行的结果上有什么不一样: System.out.println(String.valueOf(null)); System.out.println(null); 咱们看到的输出将是如出一辙的东西:null,但它们意义相同吗?