【问题标题】:Is using int + "" bad for converting Java int's to Strings?使用 int + "" 将 Java int 转换为字符串是否不好?
【发布时间】:2026-02-18 20:40:01
【问题描述】:

所以我们的计算机科学老师教我们如何通过这样做将ints 转换为Strings:

int i=0;
String s = i+"";

我猜他是这样教我们的,因为这是相对基础的计算机科学(请注意,高中课程),但我想知道与以下相比,这在某种程度上是否“糟糕”:

int i=0;
String s = Integer.toString(i);

是不是更贵?坏习惯?提前致谢。

【问题讨论】:

标签: java string int


【解决方案1】:

使用该方法将编译,因为您的老师使用了该方法,您可能希望在课堂上做事时使用该方法,但为了使其更干净,您可能希望使用以下代码。

int i=0;
String s = Integer.toString(s);

它看起来更正式....

【讨论】:

    【解决方案2】:
    i+""
    

    等价于

    new StringBuilder().append(i).append("").toString();
    

    所以是的,它的效率较低,但除非你在循环中这样做,否则你可能不会注意到它。

    [编辑:来自 StriplingWarrior-thanks 的 cmets]

    【讨论】:

    • +1:也就是说,我认为很多人会争辩说,从语义的角度来看,Integer.toString(i) 更好地“描述”了您尝试将整数转换为字符串的想法。 i + "" 说“我想在这个整数上附加一个空字符串。”
    • 同意@StriplingWarrior - 我原以为教授至少会提到String.valueOf()
    • 实际上它相当于new StringBuilder().append(i).append("").toString(); 否则你只会得到一个长度为 i 的后备数组的空字符串
    • 是的,棘轮是正确的 ;) 就我个人而言,我不会使用它的唯一原因是,这样做的方式很奇怪。静态方法在代码的意图上更加清晰。显式优于隐式 murmurs python zen
    【解决方案3】:

    该技术有效,但它依赖于 Java 中字符串连接的魔力(这是涉及运算符重载的少数领域之一),可能会让某些人感到困惑。

    我发现以下技术更清楚:

    String.valueOf(123); // => "123"
    Integer.toString(123); // => "123"
    

    正如其他人所提到的,它会产生更简洁的字节码,因为它避免了新 StringBuilder 的隐式构造和伴随的方法调用。

    【讨论】:

      【解决方案4】:

      理论上

      指令

      String s = i + "";
      

      执行以下操作:通过调用Integer.toString(i)i 转换为字符串,并将此字符串连接到空字符串。这会导致创建三个 String 对象和一个连接。

      指令

      String s = Integer.toString(i);
      

      进行转换,并且仅进行转换。

      在实践中

      大多数 JIT 编译器都能够将第一条语句优化为第二条语句。如果这种优化甚至在之前完成(通过 javac 编译器,在将您的 Java 源代码编译为字节码时),我不会感到惊讶

      【讨论】:

        最近更新 更多