【问题标题】:String.valueOf(someVar) vs ("" + someVar) [duplicate]String.valueOf(someVar) vs ("" + someVar) [重复]
【发布时间】:2017-07-29 07:44:55
【问题描述】:

我想知道两种方法的区别。我现在正在处理一些旧代码,它们通过与空字符串 "" 连接来将 primitive 值设置为 String 值。

obj.setSomeString("" + primitiveVariable);

但是在这个链接Size of empty Java String 中它说如果您为每个实例创建一个单独的空字符串,那么显然这将占用更多内存。

所以我想到在String 类中使用valueOf 方法。我检查了文档String.valueOf() 它说 如果参数为空,则字符串等于“空”;否则返回 obj.toString() 的值。

那么哪种方法更好

  1. obj.setSomeString("" + primitiveVariable);
  2. obj.setSomeString(String.valueOf(primitiveVariable));

上述过程是在List 迭代中完成的,该迭代的大小超过 600,预计未来会增加。

【问题讨论】:

  • 您误解了链接答案的要点。您不是创建新实例。
  • 但是每当我们编写一个空字符串并执行相应的类时,都会为该空字符串创建一个字符串对象,对吧?
  • @luk2302 是的。这就是回归。
  • @ArunSudhakaran 那不是对象。字符串字面量。
  • 那么在迭代中创建这些文字会占用大量堆空间吗?

标签: java string string-concatenation value-of


【解决方案1】:

当您执行"" 时,不会创建对象。它将创建一个字符串文字。 There is a differenc(How can a string be initialized using " "?) 实际上。

来到你的实际问题,

来自String concatenation docs

Java 语言为字符串连接运算符 ( + ) 以及将其他对象转换为字符串提供了特殊支持。字符串连接是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。

你创建 StringBuilder 对象然后给另一个 String 对象。

然而 valueOf 直接给你一个 String 对象。去吧。

除了表现之外,只是想一般。为什么要与空字符串连接,而实际上您想将 int 转换为 String :)

【讨论】:

    【解决方案2】:

    问。那么哪一个是更好的方法

    A. obj.setSomeString(String.valueOf(primitiveVariable)) 通常是更好的方法。它更整洁,更国内。这会将primitiveVariable 的值打印为String,而另一个将其打印为int 值。第二种方式更像是一种“hack”,而且组织性较差。 另一种方法是使用Integer.toString(primitiveVariable),与String.valueOf基本相同。

    另请查看this postthis one too

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2012-08-28
      • 2012-12-25
      • 2013-06-28
      相关资源
      最近更新 更多