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号