我正在检查代码的性能,我在java字符串值比较中有"".equals(string)
但我有string.trim().length() == 0
这样的信息可以提供更好的性能。这是真的吗?
我对此有疑问,因为"".equals(string)
即使string为null也要小心,但对于第二件事我们首先需要null检查然后我们才能修剪字符串。
最好使用哪一个:if("".equals(string))
或if(string.trim().length() == 0)
。
答案 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()
方法。