java.lang.String.isEmpty() 更快,因为它只是将字符串的长度(存储在String对象中)与零进行比较:
1286 public boolean isEmpty() {
1287 return 0 == count;
1288 }
Run Code Online (Sandbox Code Playgroud)
使用equals("")执行实际的字符串比较 - 虽然JVM可以抵消其部分成本,但它应该更慢.在大多数实现中,它也包括长度检查:
854 public boolean equals(Object object) {
855 if (object == this) {
856 return true;
857 }
858 if (object instanceof String) {
859 String s = (String) object;
860 int hash = hashCode; // Single read on hashCodes as they may change
861 int shash = s.hashCode;
862 if (count != s.count || (hash != shash && hash != 0 && shash != 0)) {
863 return false;
864 }
865 for (int i = 0; i < count; ++i) {
866 if (value[offset + i] != s.value[s.offset + i]) {
867 return false;
868 }
869 }
870 return true;
871 }
872 return false;
873 }
Run Code Online (Sandbox Code Playgroud)
注意:两个片段都来自此java.lang.String实现.
编辑:
对于长时间运行的热代码,JVM将在其中进行优化,equals("")并且可能会提供接近的优化isEmpty().但是,对于一次性通话,可能会有一个小的性能差异.最好只使用isEmpty()并保存JVM,使其无法独立完成.
此外,isEmpty()它的意图也更清晰,在我看来,从长远来看,稍微容易维护.
请注意,如果字符串对象也可以null,这可能更好:
if ("".equals(string)) ...
Run Code Online (Sandbox Code Playgroud)
结果是一样的,但更喜欢isEmpty():
equals("") 获取一个不同的对象(来自字符串池,因此它不是实例化),然后验证给定的字符串是否等于该字符串isEmpty()只需检查字符串中的符号数(存储在私有字段中count)是否为0.少得多的开销.如果字符串也有可能null,你可以检查apache commons-langStringUtils.isEmpty(..)
| 归档时间: |
|
| 查看次数: |
4562 次 |
| 最近记录: |