java.toString() ,(String),String.valueOf的区别

(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,但它们意义相同吗?

相关文章
相关标签/搜索