首先:s.equals("")
和"".equals(s)
之间有什么区别?
其次:如果我要执行其中一项功能会发生什么? "".substring(1)
或"".charAt(0)
答案 0 :(得分:7)
关于等于,当涉及到结果时,两个等于变体之间没有区别。但是,第二个是nullsafe。如果s
为null,则第一个将抛出NullPointerException,第二个变量将仅计算为false
。
答案 1 :(得分:4)
第一个问题:如果s
不是null
,则没有区别。如果s
为null
,那么s.equals("")
会抛出NullPointerException
而"".equals(s)
只会返回false
。
第二:两者都会抛出IndexOutOfBoundsException
。
答案 2 :(得分:0)
<强>第一强>:
为两者调用类实例的方法。所以内部没有区别。
但值得注意的是,"".equals(s)
不太可能抛出NullPointerException
。 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;
}
<强>第二强>:
"".substring(1);
此调用会抛出IndexOutOfBoundsException
。从Java的文档中发生异常:如果beginIndex为负或大于此String对象的长度。
"".charAt(0):
此外,它会抛出异常,并且如上例所述:IndexOutOfBoundsException
- 如果index参数为负或不小于此字符串的长度。