哪种方法更有效String.equals(String s)或String.contains(String s)

时间:2013-04-24 18:55:56

标签: java

例如,如果我有以下内容:

String s = "Alexander";

在这种情况下效率更高,检查:

if(s.contains("Alexander"))
return true;

OR

if(s.equals("Alexander"))
return true;

请注意,这只是一个基本的例子,我需要知道的是理解方法的根源。哪个更高效还是更快?

6 个答案:

答案 0 :(得分:4)

仅供注释; - )

String string = "Alex";
long now = System.currentTimeMillis();
for (int n = 0; n < 100000000; n++) if (string.contains("Alexander")) ;
System.out.println("Time: " + (System.currentTimeMillis() -now));

now = System.currentTimeMillis();
for (int  n = 0; n < 100000000; n++) if (string.equals("Alexander")) ;
System.out.println("Time: " + (System.currentTimeMillis() -now));

结果:

Time: 1720
Time: 756

答案 1 :(得分:3)

这样:

return s.equals("Alexander");

答案 2 :(得分:1)

equals更快,因为它只需要从两个字符串的开头开始比较字符串,而contains必须循环s以检查"Alexander"是否开始,在s内的任何地方结束。

但忽略了......

if (s.equals("Alexander"))

会更有效率,因为否则你必须这样做

if (s.contains("Alexander") && "Alexander".contains(s))

保证平等。

答案 3 :(得分:1)

等于效率更高,只检查字符串是否匹配。 包含将在字符串中搜索该文本。

答案 4 :(得分:1)

如果查看java String.java的代码,您可以意识到EqualsContains更有效,因为第一个检查字符串的大小然后比较一个每个角色一个。另一方面,Contains调用方法indexOf,该方法搜索字符串之间的特定重合。

两种方法的目的完全不同。您应该使用equals来测试字符串之间的相等性。

答案 5 :(得分:1)

他们有两种不同的方法,所以我不确定比较它们会非常现实。但是,正如已经指出的那样,contains()执行实际搜索字符串作为目标值的额外步骤,而equals()只检查两个字符串是否相同。