java - 为什么两个字符串对象的连接引用不等于相同的内容字符串对象

标签 java string

<分区>

为什么 s3s5 String 对象不同,当 s5 尝试在 String 池中创建它检查内容 s3 已经有相同的内容,所以 s5 引用字符串池中的 s3 对象。但是我的假设是错误的,那么请大家指正。

String s1 = "Buggy";
String s2 = "Bread";
       
String s3 = "BuggyBread";
      
String s4 = "Buggy" + "Bread"; 
String s5 = s1 + s2 
System.out.println(s3 == s4); // True
System.out.println(s3 == s5); //false

最佳答案

  1. String s4 = " buggy "+ "面包";

    编译器足够聪明,可以意识到这只是 s3 中已经引用的常量 BuggyBread。换句话说,s4 引用与字符串池中的 s3 相同的String

  2. 字符串 s5 = s1 + s2;

    在这里,编译器忠实地转换为基于 StringBuilder 的变量内容串联,这会产生与 s3 不同的引用。换句话说,这类似于:

    StringBuilder sb = new StringBuilder(s1);     
    sb.append(s2);
    String s5 = sb.toString();
    

关于java - 为什么两个字符串对象的连接引用不等于相同的内容字符串对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30275117/

相关文章:

c - 使用变量定义字符串大小在 C 的 for 循环中无法正常工作

java - 关闭括号之前的转义字符是多余的

php - 使用 PHP 获取字母表中下一个字母的最有效方法

c# - 普通文本框中的自动文本更正

java - Chronicle Queue 可以像 RMI 一样使用吗?

php - 如何在字符串 wordsolver 应用程序中的简单 mysql/php 单词中的字符串中找到单词匹配项?

java - 打印由逗号分隔的 arraylist 元素的简单而优雅的方法是什么?

java - 将按钮绑定(bind)到多个属性不起作用

java - 错误:任务应用程序执行失败:transformClassesWithMultidexlistForDebug'

java - Wildfly 8.1.0 Final + Arquillian 1.1.5.Final = ArquillianServletRunner - 没有返回结果