【问题标题】:Difference between casting to String and String.valueOf转换为 String 和 String.valueOf 之间的区别
【发布时间】:2013-05-24 19:05:31
【问题描述】:

有什么区别

Object foo = "something";
String bar = String.valueOf(foo);

Object foo = "something";
String bar = (String) foo;

【问题讨论】:

  • 呃,它们根本不一样。

标签: java casting


【解决方案1】:

只有当对象实际上是一个字符串时,才能转换成字符串:

Object reallyAString = "foo";
String str = (String) reallyAString; // works.

当对象是别的东西时它不会起作用:

Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException

String.valueOf() 但是会尝试将您传递给它的任何内容转换为String。它同时处理基元 (42) 和对象 (new Integer(42),使用该对象的 toString()):

String str;
str = String.valueOf(new Integer(42)); // str will hold "42"
str = String.valueOf("foo"); // str will hold "foo"
Object nullValue = null;
str = String.valueOf(nullValue); // str will hold "null"

特别注意最后一个示例:将null 传递给String.valueOf() 将返回字符串"null"

【讨论】:

  • @AdamStelmaszczyk:我怀疑有什么相关的。 也许强制转换稍微快一些,但其他差异(null 处理、处理其他类型的能力)只是显着比任何可能存在的微小性能差异更重要。
  • 为了进一步推动这个问题,调用String.valueOf()obj.toString() 之间有什么显着区别吗? (我想到的第一个问题是,如果obj 为空,obj.toString() 将通过异常。)
  • @Kevin:对于引用类型(也称为“对象”),唯一的区别是 null 会发生什么。如果您查看 JDK 中 String.valueOf() 的实现,您会发现它对非空引用所做的只是调用 toString()
  • 在 Java 7 Update 80 中尝试了 str = String.valueOf(null),它抛出了 NullPointerException
  • @silver:确实,我过于简单化了。 String.valueOf((Object) null) 将返回字符串“null”。用文字 null 调用它会调用 String#valueOf(char[]) 当你传入 null 时实际上会抛出 NPE。
【解决方案2】:

String.valueOf(foo) 调用 foo.toString() 方法并将结果分配给 bar。它是 null 并且类型安全操作。

如果类型匹配,铸造只会将 foo 分配给 bar。否则,表达式将抛出 ClassCastException

【讨论】:

  • +1 用于解释 String.valueOf(Object) 调用 Object.toString()
【解决方案3】:

强制转换意味着对象需要是String类型,而String.valueOf()也可以是其他类型。

【讨论】:

    【解决方案4】:

    String 的情况下,两者都生成相同的输出

    Casting 在提供的对象不是 string. 的情况下失败

    【讨论】:

      【解决方案5】:

      String.valueOf 方法用于获取其参数对象的字符串表示形式。

      (String) value 将对象值转换为字符串。

      您可以使用 String.valueOf 方法获取对象的 String 表示形式,而不必担心空引用。如果您尝试在空引用上强制转换字符串,您将得到 NullPointerException。

      【讨论】:

        【解决方案6】:
        final Object obj = null;
        final String strValOfObj = String.valueOf(obj);
        final String strCastOfObj = (String) obj;
        if (strValOfObj == null) System.out.println("strValOfObj is null");
        if (strCastOfObj == null) System.out.println("strCastOfObj is null");
        

        输出strCastOfObj is null

        【讨论】:

          【解决方案7】:

          第一个,即String.valueOf,仅当对象是值类型或字符串的可表示类型时才返回字符串。否则它会引发异常。

          在后一种中,如果对象不是字符串,则直接转换可能会失败。

          在线示例。

          http://ideone.com/p7AGh5

          【讨论】:

          • 什么类型的异常?
          【解决方案8】:

          in String.valueOf();字符串作为工作类型转换 valueof() 方法中传递的所有参数转换为字符串,就像 integer.string() 仅将整数转换为字符串

          【讨论】:

            猜你喜欢
            • 2013-02-25
            • 2012-11-14
            • 2010-11-29
            • 1970-01-01
            • 1970-01-01
            • 2019-11-29
            • 2013-06-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多