现在的位置: 首页 > 综合 > 正文

Java对象之间的比较之equals和==

2019年10月16日 ⁄ 综合 ⁄ 共 1372字 ⁄ 字号 评论关闭
/**
 * 
 */
package string;

/**
 * @author Administrator
 * “==” 比较引用,即判断是否指向同一个对象
 * “equals()” 默认是比较引用,包装类重写了这些方法,比较对象内容,我们自己的类一般也重写equals方法
 *
 * equals方法属于Object类,默认的是比较两个对象引用是否相等,即是否指向同一个对象
 * 和使用==号来比较的结果是一样的。
 * 
 * 对于String,Integer等包装类型来说,他们已经重写了Object的equals方法,根据内容判断是否相等。
 * 
 * 所以一般来说,对于自己实现的类,要想在某些情况下比较返回true,必须重写equals方法。
 * 某些情况下,重写equals方法最好吧hasCode()也重写了,比如要存入Map/Set的时候。
 */
//没有重写equals的对象
class CompareObject1{
	int v;
	public CompareObject1(int v){
		this.v = v;
	}
}

//重写equals的对象
class CompareObject2{
	int v;
	public CompareObject2(int v){
		this.v = v;
	}
	
	public boolean equals(Object o){
		CompareObject2 c = (CompareObject2)o;
		return this.v == c.v? true:false;
	}
}

public class EqualsTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//普通对象比较
		CompareObject1 c1 = new CompareObject1(1);
		CompareObject1 c2 = new CompareObject1(1);
		System.out.println(c1 == c2); 		//引用不同
		System.out.println(c1.equals(c2)); 	//引用不同
		
		//String比较
		String s1 = new String("hello");
		String s2 = new String("hello");
		System.out.println(s1 == s2);		//引用不同
		System.out.println(s1.equals(s2));	//里面的值相同,重写过equals方法
		
		
		//Integer比较
		Integer int1 = new Integer(1);
		Integer int2 = new Integer(1);
		System.out.println(int1 == int2);		//引用不同
		System.out.println(int1.equals(int2));	//里面的值相同,重写过equals方法
		
		//重写了equals方法的普通对象的比较
		CompareObject2 o1 = new CompareObject2(1);
		CompareObject2 o2 = new CompareObject2(1);
		System.out.println(o1 == o2); 			//引用不同
		System.out.println(o1.equals(o2)); 		//里面的值相同,重写过equals方法
	}
}
/**
 * Output:
false
false
false
true
false
true
false
true
 * */

抱歉!评论已关闭.