Java的空字符串等于结果(Java null String equals result)

2019-07-29 21:49发布

请帮我怎么做与空值的Java工作string.equals? 是有一些问题的例外? 三种情况:

boolean result1,result2, result3;

    //1st case
    String string1 = null;
    String string2 = null;
    result = string1.equals(string2);
    //2nd case
    String string1 = "something";
    String string2 = null;
    result2 = string1.equals(string2);
    //3rd case 
    String string1 = null;
    String string2 = "something";
    result3 = string1.equals(string2);

什么样的结果的值? 我希望这个值:

RESULT1是真实的;
RESULT2是假的;
result3是假的;

Answer 1:

不能使用反引用(点“”)运算符可以访问实例变量或调用方法上来说,如果该实例为null 。 这样做将产生一个NullPointerException

这是常见的做法是使用你知道非空的字符串比较的东西。 例如, "something".equals(stringThatMayBeNull)



Answer 2:

事实上,你不能用一个点运算符null变量调用非静态方法。

尽管这样,一切都取决于重写equals()的方法Object类。 在的情况下String类,是:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}

如果传递null作为参数,无论是“如果”会失败,返回false ;

对于你的情况的替代方案是建立一个方法,你的要求:

public static boolean myEquals(String s1, String s2){
    if(s1 == null)
        return s2 == null;
    return s1.equals(s2);
}


Answer 3:

使用Objects.equals()比较字符串,或者如果你正在使用JDK 7或更高版本的任何其他对象。 它会处理空值,而不抛出异常。 查看更多在这里: 如何-DO-I-比较串式的Java



Answer 4:

这段代码会抛出一个NullPointerException时string1为空,调用equals就可以了,因为是当一个方法调用隐含任何空对象的情况。

要检查是否字符串为空,则使用==而不是equals

虽然result1result3不会设置由于NullPointerExceptions的,结果2会是假的(如果你运行它的其他结果的上下文之外)。



Answer 5:

您将在例1和例3得到一个NullPointerException。

你不能调用任何方法(如equals() )一个空的对象。



Answer 6:

为了防止NPE而比较字符串,如果其中至少有一个可以为空,使用StringUtils.equals方法是空安全。



Answer 7:

我们不能用点运算符与空,因为这样做会给NullPointerException异常。 因此,我们可以在我们的节目try..catch块的优势。 这是解决你的问题的一种非常原始的方式,但你会得到所需的输出。

try {
   result = string1.equals(string2);
} catch (NullPointerException ex) {
   result = string2 == null; //This code will be executed only when string 1 is null
}


文章来源: Java null String equals result