【发布时间】:2020-04-22 19:41:40
【问题描述】:
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
}
}
谁能解释一下这里的区别?谢谢!
【问题讨论】:
-
问题其实不是stackoverflow.com/questions/513832/…的复制品。 OP 很清楚
==和.equals(...)之间的语义差异。 -
@Turing85 我已经稍微编辑了这个问题,我对带有字符串的 final 关键字有另一个疑问
-
重新编辑:不要同时问多个不同的问题。但简单的答案是用
final声明的变量可以是(并且在这种情况下是)常量表达式;和字符串常量表达式总是放入字符串池中。 -
我回滚了您的编辑,请参阅 ask one question per post 了解其背后的原因。但关于最终字符串,请参阅Comparing strings with == which are declared final in Java