重新出发000003-阅读文章"说说Java里的equals 上"。
2018-05-30 17:29:02
imadiaos
package review.base.Java那些事儿;
public class 三_说说Java里的equals_上 {
public static void main(String[] args){
TestEquals te = new TestEquals();
te.testEqualsMethod();
}
}
class Person{
private String name;
public Person(String name) {
this.name = name;
}
}
class TestEquals{
public void testEqualsMethod(){
String s1 = new String("100");
String s2 = new String("100");
System.out.println(s1.equals(s2)); // true. 字符串直接实现的,判断内容相等。此处返回true没什么问题。
Integer itr = new Integer("123");
Long lon = new Long("123");
System.out.println(itr.equals(lon)); // false. Integer的判断中,先看类型是否相同。类型相同再对原始类型的值。value == obj.intValue。
Person p1 = new Person("eric");
Person p2 = new Person("eric");
System.out.println(p1.equals(p2)); // false. 没有重写的情况下使用Object默认的实现,即默认的对比内存中的位置。
/**
* 需要注意的是,其实==和equals在java中没有什么必然的联系。在引用类型中,"=="是比较两个引用是否都指向堆内存的同一个地址(同一个对象),
* 而equals在原始的Object类中的实现,就是使用==去判断的。所以未实现equals方法的Person类,即便用equals也不"相等"。
*
* String对象是重写了equals方法的。其实现思路为:
* 1、判断是否只想同一个堆内存地址,如果是同一个,则直接返回true
* 2、如果不是同一个地址就判断类型,如果类型一样就判断两个String底层的char数组长度是否一样,如果还是一样,就循环每一个char字符对比。全部满足返回则true。
*/
/**
* 如果想要使p1.equals(p2)。则需要重写Person类的equals方法。
*/
}
}