Java “s.equals”和“s.equals”之间有什么区别&引用;。等于

Java “s.equals”和“s.equals”之间有什么区别&引用;。等于,java,string,equals,Java,String,Equals,首先:s.equals(“”和”.equals()之间有什么区别 第二:如果我执行其中一项功能,会发生什么“”。子字符串(1)或“”。字符(0)关于相等,当涉及到结果时,两个相等变量之间没有差异。然而,第二个是空安全的。如果s为null,第一个变量将抛出NullPointerException,第二个变量的计算结果将为false 第一个问题:如果s不是null,则没有区别。如果s为null,则s.equals(“”将抛出NullPointerException,而“.equals(s)将仅返回f

首先:
s.equals(“”
”.equals(
)之间有什么区别


第二:如果我执行其中一项功能,会发生什么<代码>“”。子字符串(1)或
“”。字符(0)

关于相等,当涉及到结果时,两个相等变量之间没有差异。然而,第二个是空安全的。如果
s
为null,第一个变量将抛出NullPointerException,第二个变量的计算结果将为
false

第一个问题:如果
s
不是
null
,则没有区别。如果
s
null
,则
s.equals(“”
将抛出
NullPointerException
,而
“.equals(s)
将仅返回
false


第二:这两个都会抛出一个
索引outofboundsexception
第一个

"".substring(1);
为这两个类调用类实例的方法。因此,它的内部结构没有区别

但是,值得注意的是,
”.equals
不太可能抛出
NullPointerException
。对于
字符串
类,其实现如下:

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);
此调用将抛出一个
索引outofboundsException
。从Java文档中可以看到一个异常:如果beginIndex为负值或大于该字符串对象的长度


此外,它还会引发异常,如前一个示例所述:
IndexOutOfBoundsException
-如果index参数为负数或不小于此字符串的长度。

对于第二个问题,是什么阻止您运行某些代码并查看它们?您甚至可以在浏览器中的几个网站上运行Java online。请询问。高度相关:如果您无法运行第二个示例,您可以阅读文档,其中将告诉您发生了什么。