我正在使用JSP中的Java代码,我试图比较字符串,并且遇到问题。Java中的字符串比较
我宣布两个字符串
s1 = "din";
s2 = "din";
然而,if (s1 == s2)
永远不会执行。有人能帮我吗?
我正在使用JSP中的Java代码,我试图比较字符串,并且遇到问题。Java中的字符串比较
我宣布两个字符串
s1 = "din";
s2 = "din";
然而,if (s1 == s2)
永远不会执行。有人能帮我吗?
你到底想达到什么目的?
比较字符串或它们的值? 如果你期待,你(如果)条件应该返回true,则使用
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以前提供的相同的优化。
在上述两种情况下,使用equals()将返回true。
在Java语言规范中,当字符串是相同的对象时有一些保证,但是你是对的,总是更好地使用'equals'。 – 2011-03-13 01:33:24
@PaŭloEbermann好点 - 我的意思是从逻辑的角度来看更多,而不是了解JLS的细节。 – berry120 2011-03-13 01:34:55
请显示您的实际代码。你在使用scriptlets吗? (请不要) – 2011-03-12 23:31:31
在一些JVM上,这实际上会工作,因为他们实习所有字符串常量。 – Neil 2011-03-12 23:44:36
您应该使用.equals比较平等(如其他人所述)。但是,请注意,在给出的例子中(s1 == s2)通常会等于true,因为字符串文字将被实现(s1和s2将引用同一个对象) – Neil 2011-03-12 23:44:52