gpt4 book ai didi

java - 在Java中使用 "=="

转载 作者:行者123 更新时间:2023-12-01 06:48:42 25 4
gpt4 key购买 nike

public class Test { 
public static void main(String[] args)
{
String s1 = "HELLO";
String s2 = "HELLO";

System.out.println(s1 == s2); // true
}
}

但是当我使用时:

public class Test { 
public static void main(String[] args)
{
String s1 = new String("HELLO");
String s2 = new String("HELLO");

System.out.println(s1 == s2); // false
}
}

有人可以解释一下这里的区别吗?谢谢!

最佳答案

在第一个示例中

String s1 = "HELLO";
String s2 = "HELLO";

s1s2 的值是编译时常量。因此,编译器只生成一个 String 对象,保存值 "HELLO" 并将其分配给 s1 s2 。这是Common Subexpression Elimination的一个特例。 ,一个著名的编译器优化。因此,s1 == s2 返回true

在第二个示例中,通过 new 显式构造了两个不同的 String。因此,根据 new 的语义,它们必须是单独的对象。

我创建了一个Ideone demo不久前重点介绍了一些表现出这种行为的案例。

您可以使用String::intern()强制返回相同的String。 :

String s1 = new String("HELLO").intern();
String s2 = new String("HELLO").intern();
System.out.println(s1 == s2); // will print "true";

Ideone demo

关于java - 在Java中使用 "==",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59592175/

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