Solo  当前访客:1 开始使用

重新出发000003-阅读文章"说说Java里的equals 上"。

2018-05-30 17:29:02 imadiaos
0  评论    0  浏览

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方法。
	 */

}

}

,
TOP