Java null String等于结果

use*_*772 12 java string null equals

请帮我看看java中的string.equals如何使用null值?异常有问题吗?三种情况:

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);
Run Code Online (Sandbox Code Playgroud)

结果的价值是什么?我期待这个值:

result1是真的;
result2为false;
result3是假的;

sjr*_*sjr 35

如果该实例是实例变量,则不能使用解除引用(点,'.')运算符来访问实例变量或调用实例上的方法null.这样做会产生一个NullPointerException.

通常的做法是使用您知道的非空字符串进行字符串比较.例如,"something".equals(stringThatMayBeNull).

  • 不完全正确.您可以在空引用上调用静态方法. (25认同)

eli*_*ias 11

实际上,您不能在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;
}
Run Code Online (Sandbox Code Playgroud)

如果你null作为参数传递,"if"都将失败,返回false;

您的案例的另一种选择是为您的要求构建一个方法:

public static boolean myEquals(String s1, String s2){
    if(s1 == null)
        return s2 == null;
    return s1.equals(s2);
}
Run Code Online (Sandbox Code Playgroud)


Erk*_*Erk 8

使用Objects.equals(),如果你正在使用JDK 7或更高版本来比较字符串,或任何其他对象。它将处理空值而不会引发异常。在此处查看更多信息:如何在Java中比较字符串

  • 尽管接受的答案中的“字符串文字” .equals(someStringVariable)的示例值得称赞,但这无助于OP弄清如何处理两个字符串均为空的情况(尽管这是第一种情况)已提交OP)。这是最好的答案,因为它可以处理所有3种情况,而无需使用自定义代码或第三方库。 (3认同)