• (String)、toString、String.valueOf的区别


      在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。

          常用的方法有(String)要转换的对象,Object#toString(),String.valueOf(Object)等。

    • (String)

    • 这是标准的类型转换,将object转成String类型的值。使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastException异常。此外,需特别小心的是因定义为Object 类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外小心。如: 
      Object obj = new Integer(100); 
      String strVal = (String)obj;

        在运行时将会出错,因为将Integer类型强制转换为String类型,无法通过。

        

    • toString
    • 在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。

            

        

    • String.valueOf
    • 这个方法是静态的,直接通过String调用,可以说是完美,只是平时不习惯这样写而已,这样的实现避免了前面两个的不足和缺点。首先来看看他内部的实现机制:
      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!”);
      }

      这样的语句将可能会发生什么问题。再想一下,向控制台输出时,在视觉上如下语句在执行的结果上有什么不同:

      Object obj = null;
      System.out.println(String.valueOf(obj) + "->此处null的类型是" + String.valueOf(obj).getClass());
      System.out.println(obj);

      我们看到的输出将是一模一样的东西:null,但它们意义相同吗?

            

  • 相关阅读:
    ubuntu安装jdk的两种方法
    LeetCode 606. Construct String from Binary Tree (建立一个二叉树的string)
    LeetCode 617. Merge Two Binary Tree (合并两个二叉树)
    LeetCode 476. Number Complement (数的补数)
    LeetCode 575. Distribute Candies (发糖果)
    LeetCode 461. Hamming Distance (汉明距离)
    LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
    LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)
    LeetCode 371. Sum of Two Integers (两数之和)
    LeetCode 342. Power of Four (4的次方)
  • 原文地址:https://www.cnblogs.com/xhyouyou/p/6014367.html
Copyright © 2020-2023  润新知