2010-10-07 49 views
7

何时应该比较String作为对象,何时应该使用它们的equals方法?为了确保,我总是使用equals,但这看起来效率不高。在什么情况下我可以确定string1 == string2是安全使用?Java中的字符串比较和字符串实习

谢谢!

+3

String.equals()是有效的。检查的第一件事是如果string1 == string2。 (实际上Object.equals()检查这个。) – 2010-10-07 21:01:26

+0

当然!我多么愚蠢。这是一个非常明显的事情要做。如你所说,效率高。从来没有。 *耻辱我!*谢谢! – 2010-10-07 21:26:45

回答

16

您应该差不多总是使用equals。你可以肯定,如果string1 == string2将工作:

  • 你已经确信你有一些其他的方式(不同的价值观如您在使用从一组获取的字符串值,但比较它们的一些其他原因)
  • 你知道你要处理的编译时间字符串常量
  • 你手动拘禁自己

这真的不会发生字符串很多时候,在我的经验。

+0

谢谢乔恩,你总是把事情简单明了。 – 2010-10-07 21:28:47

+1

绝对是正确的答案。使用'=='是因为equals()效率低下是过早优化的一个很好的例子。 – DJClayworth 2010-10-07 21:30:06

+0

而String.intern()在大多数情况下足够慢以至于无法实现性能。 – Darron 2010-10-07 21:30:09

1

从我所知道的Java中,string1==string2只有在对这些对象的引用相同的情况下才为真。看看下面的情况

String string1 = new String("Bob"); 
String string2 = new String("Bob"); 

string1 == string2; // false, they are seperate objects 
string1 = string2; // asigning string1 to string2 object 
string1 == string2; // true, they both refer to the same object 
+2

第一次比较* *不会是错误的,因为它们不是*独立的对象。字符串文字是用Java编写的。 – sepp2k 2010-10-07 20:53:19

+0

在这种情况下,第一个比较应该返回false- String string1 = new(“Bob”); String string2 = new(“Bob”); – stratwine 2010-10-07 21:01:40

+0

我会编辑我的答复,使其更清楚地定义。我想我可能会遇到Java的这个问题。 – Anthony 2010-10-07 21:05:16

0

如果您确定对象相同,则只能使用==进行比较。

例如,如果您有最终的静态字符串变量,则可能发生这种情况。你可以肯定的是,在同一个对象之间进行比较。

坚持用equals进行字符串比较。