Java中的字符串比较

我正在使用JSP中的Java代码,我正在尝试比较字符串,我遇到了问题。

我宣布了两个字符串

s1 = "din"; s2 = "din"; 

但是, if (s1 == s2)永远不会执行。 有人能帮我吗?

比较字符串时使用’equals’。

if(s1.equals(s2)) { true }

运算符== for Strings比较引用相等,而不是值相等。

尝试调用equals而不是使用==

 if (s1.equals(s2)) { ... } 

比较字符串时,应始终使用equals方法,而不是==:

 if(str1.equals(str2)) 

……将是正确的做事方式。

出现混淆的地方如下:

 String str1 = "hello"; String str2 = "hello"; System.out.println(str1==str2); 

以上将实际打印出真实。 但是,除了上述学术目的外,你不应该使用它。 如果你正在使用==,那么你正在检查这些值是否在堆上的物理上是同一个对象。 如果你正在使用.equals(),你就会检查它们是否有意义相等,即使它们实际上是两个独立的对象。 有时候,特别是在涉及文字的地方(如上面)(或者当你手动调用intern()方法)时,出于性能原因,Java会自动使两个单独的字符串对象指向同一个对象。 但是,没有合理的保证会发生这种情况(除非你想用JLS的明确细节来打扰自己,即使这样,它也只是有时保证)并且大部分时间它都不会。 以下面的例子为例:

 String str1 = "hello"; String str2 = "he"; str2 += "llo"; System.out.println(str1 == str2); 

现在它打印错误,因为尽管有意义相同,但我们没有达到Java之前提供的相同优化。

在上面的两种情况中,using,equals()都会返回true。

你想要达到什么目的?

比较字符串或它们的值? 如果您希望您的(if)条件返回true,那么请使用

 s1.equals(s2);