s.equals("")和"" .equals(s)之间有什么区别?

时间:2016-02-12 22:33:56

标签: java string equals

首先:s.equals("")"".equals(s)之间有什么区别?

其次:如果我要执行其中一项功能会发生什么? "".substring(1)"".charAt(0)

3 个答案:

答案 0 :(得分:7)

关于等于,当涉及到结果时,两个等于变体之间没有区别。但是,第二个是nullsafe。如果s为null,则第一个将抛出NullPointerException,第二个变量将仅计算为false

答案 1 :(得分:4)

第一个问题:如果s不是null,则没有区别。如果snull,那么s.equals("")会抛出NullPointerException"".equals(s)只会返回false

第二:两者都会抛出IndexOutOfBoundsException

答案 2 :(得分:0)

<强>第一

为两者调用类实例的方法。所以内部没有区别。

但值得注意的是,"".equals(s)不太可能抛出NullPointerExceptionString类:

实现如下
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;
}

<强>第二

"".substring(1);

此调用会抛出IndexOutOfBoundsException。从Java的文档中发生异常:如果beginIndex为负或大于此String对象的长度。

"".charAt(0):

此外,它会抛出异常,并且如上例所述:IndexOutOfBoundsException - 如果index参数为负或不小于此字符串的长度。