【问题标题】:Casting to String or using String.valueOf() in Java [duplicate]转换为字符串或在 Java 中使用 String.valueOf() [重复]
【发布时间】:2013-06-10 17:39:53
【问题描述】:

今天早上我发现了一个有趣的问题——cast object to string check if valid,我发现有两种类型的答案。一种是将对象转换为字符串,另一种是获取该对象的字符串表示形式(例如,使用 String.valueOf() 或 toString())。我的问题是:最佳实践是什么?它们有什么区别?

在我提出这个问题之前,我发现了几个相关的现有问题,但我没有找到一个可以回答我的问题的问题。如果我错过了重要的问题,请原谅我,希望您不介意指出我的答案。

谢谢,

【问题讨论】:

  • IMO 我会以安全的方式使用instanceof。在String 对象中执行toString 似乎是多余的,如果对象引用不是String 并且没有覆盖toString 方法,它可能会导致未知行为。
  • @LuiggiMendoza,感谢您的快速回复。我可以进一步知道为什么它被认为是一种更安全的方式吗?或者为什么 valueOf 函数不安全?

标签: java string class casting


【解决方案1】:

如果对象不是字符串,则强制转换将在运行时抛出 ClassCastException。例如:

Object o = new Object();
String s = (String) o; //Exception here

其他两种解决方案(toStringString.valueOf)之间的区别在于空对象的情况。 toString 将抛出异常,而 String.valueOf() 将简单地返回 "null"

Object o = null;
String s = String.valueOf(o); //s = "null";
String t = o.toString(); //NullPointerException

【讨论】:

  • 非常感谢您的回答。很抱歉,我已经达到每日上限,暂时无法投票,一旦可以,我一定会投票。因此,在您的回答中,您说明了强制转换和使用函数之间的区别。我可以知道哪个(铸造或转换)在实践中更好吗?或者答案取决于用例?谢谢。
  • @keelar 如果你 100% 确定你有一个字符串,那么强制转换就可以了(例如在if(o instanceof String) 检查之后)。如果您不知道并且只想要某个随机对象的 String 表示,则应使用 toString 或 String.valueOf(取决于空字符串情况下所需的行为)。
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 2012-11-22
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 2014-01-07
  • 2016-07-07
相关资源
最近更新 更多