gpt4 book ai didi

java - 为什么在 Java 中使用不同的串联后比较字符串时会得到不同的结果?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:17 26 4
gpt4 key购买 nike

我正在研究基本的 Java 程序,我发现非常有趣的东西,我正在与你分享。 foo() 给出输出 (s==s1) = false,bar 给出 (s==s1) = true。

我想知道为什么会这样。

public class StringTest
{
public static void main(String[] args){
foo();
bar();
}
public static void foo(){
String s = "str4";
String s1 = "str" + s.length();
System.out.println("(s==s1) = " + (s1==s));
}
public static void bar(){
String s = "str4";
String s1 = "str" + "4";
System.out.println("(s==s1) = " + (s1==s));
}
}

最佳答案

在后一种情况下,编译器会优化字符串连接。由于这可以在编译时完成,因此两者都引用相同的常量字符串对象。

在前一种情况下,length() 调用无法在编译期间进行优化。在运行时,创建一个新的字符串对象,它与字符串常量不相同(但等于它)

关于java - 为什么在 Java 中使用不同的串联后比较字符串时会得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6358280/

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