字符串比较中的性能

时间:2014-11-06 06:07:00

标签: java performance

我正在检查代码的性能,我在java字符串值比较中有"".equals(string)但我有string.trim().length() == 0这样的信息可以提供更好的性能。这是真的吗? 我对此有疑问,因为"".equals(string)即使string为null也要小心,但对于第二件事我们首先需要null检查然后我们才能修剪字符串。

最好使用哪一个:if("".equals(string))if(string.trim().length() == 0)

2 个答案:

答案 0 :(得分:4)

string.trim().length() == 0"".equals(string)的结果不同。在比较他们的表现时没有任何意义,因为他们有不同的目的。 (但是,出于推测的目的,string.trim().length() == 0通常会更慢,因为trim涉及数组副本。)

  • string.trim().length() == 0表示"字符串可能不是空的,但只包含空格"。
  • "".equals(string)表示"字符串只为空或空"。

例如,"".equals(" ")的计算结果为false,但" ".trim().length() == 0的计算结果为true。

现在表达式"".equals(string)string != null && string.length() == 0的结果是相同的。 string != null && string.length() == 0 技术上会更快,但实际上并不重要。差异将是如此之小,在几纳秒的范围内。这是因为"".equals(string)只会比较长度。

一般而言,这不是担心优化的问题。

答案 1 :(得分:0)

这两种方法都不同 方法1:
if("".equals(string)) - 比较你的字符串,如果两个字符串具有相同的内容,则返回true。 refer java doc

  

boolean equals(Object anObject)
  将此字符串与指定对象进行比较。

方法2:

if(string.trim().length() == 0) - 比较字符串的长度,如果两个字符串长度相同,则返回true。

要处理null prointer异常,必须先在第二种方法中检查字符串是否为null,然后在字符串对象上调用trim()方法。