gpt4 book ai didi

java - 为什么字符串池对文字和变量的行为不同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:43 24 4
gpt4 key购买 nike

当我使用双引号将 2 个 strings(+) 运算符连接起来并与具有相同值的其他字符串文字进行比较时,结果为 true .. 但是当我连接 2 个字符串变量并比较时给出 false ?为什么会这样?

据我所知,当我们使用 (+) 运算符连接字符串时,JVM 返回新的 StringBuilder(string...).toString() ,它在堆内存中创建一个新的 String 实例,并在字符串池。如果那是真的,它如何在一种情况下返回 true 而在其他情况下返回 false?

第一种情况:

    String string1 = "wel";
String string2 = "come";
string1 = string1 + string2; //welcome

String string3 = "welcome";
System.out.println(string3 == string1); // this returns false but have same hashcode

第二种情况:

    String string4 = "wel" + "come";
String string5 = "wel" + "come";
System.out.println(string4 == string5); // this returns true

有人可以帮我解决这个问题吗?

最佳答案

请关注评论。

 string1 = string1 + string2; //StringBuilder(string...).toString() which creates a new instance in heap..

String string3 = "welcome"; // It is not in heap.

所以 string3 == string1 false

  String string4 = "wel" + "come"; //Evaluated at compile time

String string5 = "wel" + "come"; //Evaluated at compile time and reffering to previous literal

所以 string4 == string5true

关于java - 为什么字符串池对文字和变量的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com