java - 字符串连接运算符

标签 java string

有人可以正确处理代码及其输出吗?

public class HelloWorld {
  public static void main(String[] args) {
    String s1 = "Hello World";
    String s6 = "Hello" + " World";
    String s7 = "Hello";
    String s8 = " World";
    String s9 = s7 + s8;
    String s10 = s7 + " World";
    System.out.println(s1==s6);
    System.out.println(s1==s9);
    System.out.println(s1==s10);
    System.out.println(s9==s10);
  }
}

输出:

true
false
false
false

我理解s1是在字符串常量池中创建的。我想知道如何使用连接运算符创建 s6s9s10

最佳答案

编译时做了很多优化。因此,如果您在编译后查看反编译代码,您会看到:

    String s1 = "Hello World";
    String s6 = "Hello World";
    String s7 = "Hello";
    String s8 = " World";
    String s9 = (new StringBuilder(String.valueOf(s7))).append(s8).toString();
    String s10 = (new StringBuilder(String.valueOf(s7))).append(" World").toString();
    System.out.println(s1 == s6);
    System.out.println(s1 == s9);
    System.out.println(s1 == s10);
    System.out.println(s9 == s10);

而且它很容易解释。所以它是幕后的编译器,它为您做了很多工作。

当我们连接字符串文字时,它用单个文字替换它,当我们使用变量连接时,它使用 StringBuilder。

关于java - 字符串连接运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16292133/

相关文章:

java - 使用 Bouncy CaSTLe 和 PDFBox 在 Java 中验证 PDF 签名

java - Java &&中的Bittorrent实现需要有关群行为的一些信息

java - 如何隐藏一些 ListView 上下文菜单(从 xml 加载)项目?

c - ANSI C : How to split a string by newline and get a random line

java - 包装类,通过构造函数中的字符串参数创建对象时的功能差异?

java - 实例工厂方法与静态工厂方法

Java 数学开方源代码

c++ - 如何初始化对象数组?

c++ - 连接两个字符串

itoa() 的 C++ 标准替代方法,用于将 int 转换为 base 10 char*