-3

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

String s = "Alexander";

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

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

或者

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

请注意,这只是一个基本示例,我只需要了解方法的根源。哪个更有效或更快?

4

6 回答 6

6

只是为了笔记;-)

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
于 2013-04-24T19:07:06.887 回答
3

这个:

return s.equals("Alexander");
于 2013-04-24T19:01:07.143 回答
1

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

于 2013-04-24T19:09:48.907 回答
1

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

但是忽略这个...

if (s.equals("Alexander"))

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

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

以保证平等。

于 2013-04-24T19:00:45.863 回答
1

Equals更有效,它只会检查字符串是否匹配。 包含将在字符串中搜索该文本。

于 2013-04-24T19:01:29.503 回答
1

如果您查看 java String.java 的代码,您会发现它Equals比 更有效Contains,因为第一个代码首先检查字符串的大小,然后逐个比较每个字符。另一方面,Contains调用方法indexOf,该方法搜索字符串之间的特定重合。

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

于 2013-04-24T19:01:51.860 回答