Java null String等于结果

时间:2012-06-13 03:19:54

标签: 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);

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

  

result1为真;
  result2为false;
  result3为false;

8 个答案:

答案 0 :(得分:31)

如果该实例为null,则不能使用取消引用(dot,'。')运算符来访问实例变量或调用实例上的方法。这样做会产生NullPointerException

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

答案 1 :(得分: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;
}

如果您将null作为参数传递,则“if”都将失败,返回false;

您的案例的另一种方法是根据您的要求构建方法:

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

答案 2 :(得分:4)

如果您使用的是JDK 7或更高版本,请使用Objects.equals()来比较字符串或任何其他对象。它将处理空值而不抛出异常。点击此处:how-do-i-compare-strings-in-java

答案 3 :(得分:2)

每当string1为null并且在其上调用NullPointerException时,该段代码将抛出equals,就像在任何null对象上隐式调用方法一样。

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

虽然由于NullPointerExceptions而不会设置result1result3,但result2将为false(如果您在其他结果的上下文之外运行它)。

答案 4 :(得分:1)

在案例1和案例3中,您将获得NullPointerException。

您无法在空对象上调用任何方法(如equals())。

答案 5 :(得分:1)

要在比较字符串时阻止NPE(如果其中至少有一个可以为null),请使用nullU安全的StringUtils.equals方法。

答案 6 :(得分:0)

我们不能将dot运算符与null一起使用,因为这样做会产生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
}

答案 7 :(得分:0)

这类事情的最常见用例是,当我们有一个包含“ Y”或“ N”的数据库字段来表示布尔值时(这是一个旧系统,不要问)。

因此,我们这样做:

if ("Y".equals(stringObjectThatMayBeNull) ? result : otherResult);

代替此:

if (stringObjectThatMayBeNull.equals("Y") ? result : otherResult);

...在执行.equals方法时避免了NullPointerException。