【问题标题】:Java multiline string formationJava多行字符串形成
【发布时间】:2012-04-13 16:11:27
【问题描述】:

我绝不是 java 程序员,所以这看起来很基础。

当您想保持代码行简短时,哪些是“更好”的。

String str = "First part of a string.";
str += " Second part of string.";

String str = "First part of string." +
" Second part of string."

我想我的问题是 += 和 + 都创建一个新的 String 对象吗?如果他们这样做,那么两者都不是更好,这只是一个偏好问题。我给出的例子将是现实世界使用的一个很好的例子。我不希望用任何一种方法进行 3 次到 1000 次连接的比较。

谢谢

【问题讨论】:

  • 我不能代表实际的实现,但在我看来,第二个可以很容易地优化连接,只需将字符串的两个部分都视为单个文字。
  • 好人,谢谢!我是一名 ruby​​ 开发人员,使用
  • 对于一般的字符串构建(当您需要连接大量字符串时),StringBuilder 是一个很好的工具,可以帮助避免原始连接的费用。

标签: java string-concatenation


【解决方案1】:

我更喜欢第二种方法。原因是编译器可能会在编译时将连接的结果组合成单个字符串,而第一种方法可能在运行时完成(取决于实际的实现)。除非你正在做某事,否则这是一件小事然而,数百万次。

【讨论】:

  • 一定在编译时合并连接的结果。这是必需的行为。
【解决方案2】:

Java 编译器实际上需要在编译时连接第二个示例。请参阅15.28. Constant Expressions3.10.5. String Literals

【讨论】:

  • 编译器需要在编译时连接它。与 JVM 无关。
【解决方案3】:

这是我编译然后反编译时得到的:

public static void main(String[] args) {
    String str = "First";
    str += " Second";
    System.out.println(str);

    String str2 = "First" + " Second";
    System.out.println(str2);
}

变成:

public static void main(String args[]) {
    String s = "First";
    s = (new StringBuilder()).append(s).append(" Second").toString();
    System.out.println(s);
    String s1 = "First Second";
    System.out.println(s1);
}

所以第二种方法更好。

【讨论】:

    【解决方案4】:
    StringBuilder sb = new StringBuilder();
    sb.append("First part");
    sb.append("Second part");
    System.out.print(sb.toString());
    

    【讨论】:

      【解决方案5】:

      遵循 Java 的编码约定:

      String str = "First part of string. "
                   + "Second part of string.";
      

      确保“+”运算符开始下一行,这样可以提高可读性。 使用这种风格可以使代码具有可读性和高效性。 https://www.oracle.com/technetwork/java/javase/documentation/codeconventions-136091.html#248

      希望这会有所帮助!

      编码愉快,

      布雷迪

      【讨论】:

        猜你喜欢
        • 2013-10-23
        • 2011-06-02
        • 2023-02-16
        • 1970-01-01
        • 2015-09-18
        • 2020-01-29
        • 1970-01-01
        • 2023-03-26
        • 2012-06-14
        相关资源
        最近更新 更多