equals与==
equals与==
1 ==
-
对象:== 比较的是两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址。比较的是真正意义上的指针操作
-
基本数据类型:基本数据类型是作为常量在方法区中的常量池里面以HashSet策略存储起来的,在常量池中,一个常量只会对应一个地址。因此不管是再多的 123,"123" 这样的数据都只会存储一个地址,所以所有他们的引用都是指向的同一块地址
-
Integer:-128到127是作为缓存存在,正常比较,超出该范围的比较为false
2 equals
//Object类equals方法
public boolean equals(Object obj) {
return (this == obj);
}
//Integer类equals方法
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
//String类equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
- Object:Object类型的equals方法是直接通过来比较的,和是没有任何区别的,但是equals方法是可以由我们自己重写的。return true则equals比较结果为true。另外,由于使用到this,所以a.equals(b)中a不可以为null
- Integer:Integer类的euqals方法会使用intValue()方法,将Integer类对象转换为int进行比较
- String:先用==比较地址,然后比较长度,最后遍历String中存储两个字符串的char数组,所有位相同则返回true

浙公网安备 33010602011771号