【问题标题】:Which one is better to convert an object to string ".toString()" or concat with + "" or "String.valueOf" in java?在java中将对象转换为字符串“.toString()”或用+“”或“String.valueOf”连接哪个更好?
【发布时间】:2017-04-26 05:18:52
【问题描述】:

我想将我的布尔对象转换为字符串。以下哪一项是更好/正确的做法,为什么?

boolean booleanValue = true;
String strValue = Boolean.toString(booleanValue);

boolean booleanValue = true;
String strValue = booleanValue + "";

编辑

下面的答案提示我添加更多

boolean booleanValue = true;
String strValue = String.valueOf(booleanValue);

对于像Integer这样的非原始数据类型

Integer i = 10;
String strValue = i.toString();

所以,最后我们有了三种不同的类型 Boolean.toString() ,与 +String.valueOf() 连接以将任何数据类型转换为 String

【问题讨论】:

  • @ΦXocę웃Пepeúpaツ:编辑过一样的..请检查。
  • 它们是等价的。后者调用前者。

标签: java type-conversion


【解决方案1】:

使用String.valueOf(booleanValue)Boolean.toString(booleanValue),因为它们既简洁又清楚地传达了您想要做什么。避免使用+ "" 连接字符串,因为它会稍微慢一些(尽管可以忽略不计),并且不能像其他两个选项那样传达含义。

【讨论】:

  • 感谢您花时间向我解释。但我想知道为什么将字符串与+"" 连接起来会稍微慢一些?
  • 编译器通常会生成一个StringBuffer 并调用.append() 方法来生成您的字符串,这会导致它比其他选项慢。您的第二个选项如下:new StringBuffer().append(booleanValue).append("").toString()
【解决方案2】:

前者执行速度更快,而后者占用的屏幕空间更少。

顺便说一句,在你的程序的用户界面中,普通人永远不会看到真/假这两个词,所以第三种方式是(booleanValue ? "yes" : "no"),翻译成适当的语言。或开/关或启用/禁用或可见/隐藏等。

【讨论】:

  • Illing :是的,这是一种很好的做法。但我想知道former one would be executed faster 是怎么回事?
  • 看来+ 运算符在StringBuilder 的帮助下在内部工作,所以它比另一个慢一点。参考:stackoverflow.com/a/5464427/6680585
【解决方案3】:

在您提到的两个选项中,选择第一个用于生产。

仅将第二个选项用于调试。 例如,您想应用显示任何特定方法的输出的 print 语句。

除了以上两个选项,您还可以选择String.valueOf(boolean_obj) 方法。 优点是如果布尔对象分配了 null,它将被分配为 null 字符串,而当使用 Boolean.toString(boolean_obj) 时,它将抛出 NullPointerException

【讨论】:

    【解决方案4】:

    举个例子:

    // One
    String value = Integer.toString(someValue);
    
    // Two
    String value = someValue + "";
    
    // let me add Three 
    String value = String.valueOf(someValue);
    

    我会推荐使用 String.valueOf()。原因是这个调用没有显式包含参数的类型,所以如果后面从int改成double或者boolean,就不需要修改代码了。

    第二个我要说的解决方案已经出来了,因为隐式创建了一个 StringBuilder 并附加了组件。

    我猜#1比#3快一点,所以我留在3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 2014-09-30
      • 2011-06-14
      相关资源
      最近更新 更多