equals 我们都知道 是指示其他某个对象是否与此对象“相等”。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
在这我要说的是,很多时候我们程序中出现错误就是在于这个equals方法 抛出的空指针异常。
比如:
我们一般就这样写着,却不知道这样写,如果dis读到的是空消息,或者由于其他的一些异常引起dis根本就没读到数据,那么这个if就会抛出空指针异常了。
一般我们对于一个未知String去比较一个常量时最好
这也是我们匹配是不是为空
再来看看String中的equals方法的源码吧
进一步说一个
byte[] 比较呢?
这样是不行的。为什么? 看equals源码
它是两个Object在进行比较,采用的是“==”,是比较的两个对象的地址,显然是不行的。
所以在比较时一定要考虑为空,和equals到底在比较的是什么。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
在这我要说的是,很多时候我们程序中出现错误就是在于这个equals方法 抛出的空指针异常。
比如:
if(dis.readLine().equals("asdasdasd")){
...
}
我们一般就这样写着,却不知道这样写,如果dis读到的是空消息,或者由于其他的一些异常引起dis根本就没读到数据,那么这个if就会抛出空指针异常了。
一般我们对于一个未知String去比较一个常量时最好
if("asdasdasd".equals(dis.readLine())){
...
}
这也是我们匹配是不是为空
if("".equals(dis.readLine()) || null ==dis.readLine()){
...
}
再来看看String中的equals方法的源码吧
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;
}
进一步说一个
byte[] 比较呢?
String[] a = new String[]{"1","2"};
String[] b = new String[]{"1","2"};
if(a.equals(b)){
...
}
}
这样是不行的。为什么? 看equals源码
public boolean equals(Object obj) {
return (this == obj);
}
它是两个Object在进行比较,采用的是“==”,是比较的两个对象的地址,显然是不行的。
所以在比较时一定要考虑为空,和equals到底在比较的是什么。