例如,如果我有以下内容:
String s = "Alexander";
在这种情况下更有效,检查:
if(s.contains("Alexander"))
return true;
或者
if(s.equals("Alexander"))
return true;
请注意,这只是一个基本示例,我只需要了解方法的根源。哪个更有效或更快?
例如,如果我有以下内容:
String s = "Alexander";
在这种情况下更有效,检查:
if(s.contains("Alexander"))
return true;
或者
if(s.equals("Alexander"))
return true;
请注意,这只是一个基本示例,我只需要了解方法的根源。哪个更有效或更快?
只是为了笔记;-)
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
这个:
return s.equals("Alexander");
它们是两种不同的方法,所以我不确定比较它们是否非常现实。然而,正如已经指出的那样,实际搜索字符串以查找目标值contains()
的额外步骤,而只是检查两个字符串是否相同。equals()
equals
更快,因为它只需要比较从两个字符串的开头开始的字符串,而contains
必须循环s
检查是否"Alexander"
开始和结束在s
.
但是忽略这个...
if (s.equals("Alexander"))
会更有效率,因为否则你必须做
if (s.contains("Alexander") && "Alexander".contains(s))
以保证平等。
Equals更有效,它只会检查字符串是否匹配。 包含将在字符串中搜索该文本。
如果您查看 java String.java 的代码,您会发现它Equals
比 更有效Contains
,因为第一个代码首先检查字符串的大小,然后逐个比较每个字符。另一方面,Contains
调用方法indexOf
,该方法搜索字符串之间的特定重合。
两种方法的目的完全不同。您应该使用equals
来测试字符串之间的相等性。