【问题标题】:What is the String equivalent of += in numeric data forms?数字数据形式中 += 的字符串等价物是什么?
【发布时间】:2014-03-23 03:47:14
【问题描述】:

我有一个代码是:

String str = "hi";
String[] strArray = new String[5];
for(int c = 0;c < 5;c++){
    str += strArray[c];
}

虽然有 5 个字符串我可以一个一个地做?但是如果有 50 个,甚至 500 个呢?这种类型的 += 给了我一个错误,那么如何正确地将数组中的所有字符串相加呢?

【问题讨论】:

  • 什么错误?它应该与 5 或 50 一起使用。
  • 字符串是不可变的,这意味着它们的内容不能改变。尝试使用 StringBuilder 类。
  • @user3352495 存储在字符串池中的文字字符串不能更改,但变量不是最终的,因此可以重新分配。
  • @zbz.lvlv 错误是什么?

标签: java arrays string for-loop logic


【解决方案1】:

不要在String 对象上使用+=,而是使用StringBuilder。在 JAVA 中附加字符串的原因每次都会创建不可变的字符串对象,这会导致内存爆炸。另一方面,StringBuilder 是可变对象,你追加到你的心的内容,然后返回一个 String 对象。

    StringBuilder stringBuilder = new StringBuilder();
    String[] strArray = new String[5]; //or some big number
    for(int c = 0;c < 5;c++)
    {
        stringBuilder.append(strArray[c]);
    }
    System.out.println(stringBuilder.toString());

【讨论】:

    【解决方案2】:

    我不确定您遇到了什么错误 - 我运行了您的示例,它运行良好。 但是,如果您打印生成的str,则会得到hinullnullnullnullnull,因为您还没有在strArray 中添加任何内容。

    += 运算符的字符串连接在Java 中效率不高:要有效地做到这一点,您需要使用StringBuilder 类。

    使用StringBuilder 类的示例:

        StringBuilder builder = new StringBuilder();
        String[] strArray = new String[50];
        // Put something in the strings in strArray
        for (int c = 0; c < strArray.length; c++) {
            builder.append(strArray[c]);
        }
        String str = builder.toString();
    

    【讨论】:

    • 我认为他们不久前优化了它。请参阅 [1] 现在,您可以进行字符串连接,并且在内部将使用 StringBuilder。 [1]stackoverflow.com/questions/14927630/…
    • 我认为您错误地阅读了该问题的答案。接受的答案实际上是说 use StringBuilder 而不是使用 + 运算符连接 - 如果你在循环中这样做,就像 OP 要求的那样。
    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多