与空字符串连接以进行字符串转换真的那么糟糕吗?

2022-09-01 01:03:15

假设我有两个变量,稍后我想将它们连接成一个字符串。这就是我的做法:char

char c1, c2;
// ...

String s = "" + c1 + c2;

我见过有人说“把戏”是“丑陋的”,等等,你应该使用或代替。我更喜欢这个结构,因为:"" +String.valueOfCharacter.toString

  • 如果可能的话,我更喜欢使用语言功能而不是API调用
    • 一般来说,语言通常不是比API更稳定吗?
    • 如果语言功能只隐藏了API调用,那么更有理由更喜欢它!
      • 更抽象!隐藏是好的!
  • 我喜欢这一点,并且在视觉上处于同一水平c1c2
    • String.valueOf(c1) + c2暗示一些特别的东西c1
  • 它更短。

真的有一个很好的论据为什么或更可取吗?String.valueOfCharacter.toString"" +


琐事:在java.lang.AssertionError中,以下行出现7次,每行都有不同的类型:

    this("" + detailMessage);

答案 1

你的论点很好;这是Java语言中最具表现力的领域之一,正如你所发现的那样,这个成语似乎根深蒂固。"" +

请参阅 JLS 中的字符串串联。像这样的表达式

"" + c1 + c2

等效于

new StringBuffer().append(new Character(c1).toString())
                  .append(new Character(c2).toString()).toString()

除了所有的中间对象都不是必需的(所以效率不是动机)。规范说一个实现可以使用或不使用。由于此功能内置于语言中,我认为没有理由使用更冗长的形式,尤其是在已经很长的语言中。StringBuffer


答案 2

该结构的问题在于它通常不表达意图。

它表示字符串与另一个值的串联,但串联通常不是此行的目标。

在您演示的特定情况下,串联实际上是目标,因此此代码确实表达了意图。

在这种方法的更常见用法中(),串联只是一种容忍的副作用,而转换是实际目标。而一个简单的表达意图就更加清晰了。String s = "" + intValue;intValueString.valueOf(intValue)