Java 比较可能为null的字符串的更好方法

Java 比较可能为null的字符串的更好方法,java,string,Java,String,我只是想知道是否有更好的方法。我觉得可能效率不高。问题是由于DB的原因,我需要比较字符串,这些字符串有时可能为空,有时也可能为非空 public static boolean compareStrings(String str1, String str2){ if(str1 == null && str2 == null) return true; if(str1 != null && str2 != null){ if(str

我只是想知道是否有更好的方法。我觉得可能效率不高。问题是由于DB的原因,我需要比较字符串,这些字符串有时可能为空,有时也可能为非空

public static boolean compareStrings(String str1, String str2){

    if(str1 == null && str2 == null) return true;

    if(str1 != null && str2 != null){
        if(str1.equals(str2))
            return true;
    }

    return false;
}

通常的习语是:

return (str1 == null ? str2 == null : str1.equals(str2));

只有在程序正常执行期间出现瓶颈时,此代码才会低效。了解情况是否属实的唯一方法是通过探查器运行程序。在您这样做并看到此函数导致性能问题的事实之前,我不会担心它。

您说这些问题可能来自数据库。老实说,在这一点上,与数据库查询的成本相比,一些空性测试带来的任何低效都是微不足道的。我会关注可读性

为此,我将开始使用及其类:

基本上,我希望它能按照Taymon的代码来实现——但把它放在一个地方很好


编辑:对于Java 7+您不需要番石榴。您可以只使用
java.util.Objects.equals(a,b)
如果您愿意使用apache Commons StringUtils,那么它们就有equals来比较两个字符串null-safe

迁移到…?所以很抱歉,谢谢您以后会这么做。我担心这一点可能有点挑剔,尤其是在没有评测的情况下。除非遇到内存泄漏,否则我通常不使用探查器。我多多少少想知道是否有比开发自己的静态方法更好的实现。谢谢你的“可读性”。。。这确实让我想到了
对象。ReferenceEquals
,这不是一件好事:(@pst:这应该会让你想到静态
对象.Equals
方法,它是.NET中已经内置的等效方法。对于最近遇到这个问题的人来说,Java 7中也有同样的东西:我想补充一点,我是为android和TextUtils.Equals(a,b)做这件事的;确实如此
boolean equal = Objects.equal(a, b);