改写equals 方法时请遵守的约定

 

package EffectiveJava;
import static java.lang.System.out;
// 一个违反对称性的类
class CaseString{
	private String s;
	public CaseString(String s) {
		this.s = s;
	}
	@Override 					//这个方法的目的是为了使CaseString 和 String 可以互操作,但这是做不到的,只会违反的equals的对称性
	public boolean equals(Object o) { //该方法违反了对称性,即CaseString.equals(String) 而 String not equals (CaseString) ,String 只能equals String
		if(o instanceof String)
			return s.compareToIgnoreCase((String)o)==0;
		if(o instanceof CaseString)
			return s.compareToIgnoreCase(((CaseString)o).s)==0;
		return false;
	}
	
}
public class _3_7_equals {
	
	public static void main(String args[]) {
		CaseString s1 = new CaseString("abc");
		String s2 = "abc";
		out.println(s1.equals(s2));
		out.println(s2.equals(s1));
		
	}
}
/**
 * 	还有一个Point类的经典例子
 * 		Point类(int x,int y)
 * 			|———— ColorPoint(int x,int y,Color)
 * 
 * 		
 */

/**
 * 		编写 equals 的步骤
 * 		1. 用 == 对其进行是否同一对象引用的判断,有利于效率的提高
 * 		2. instanceof 类型判断,相同,true 否则 false ,如果是对于同一接口类型的判断,如果Collection 集合的判断,只要继承了List接口,就可以接下来的判断了
 * 		3. 实参转换成正确的类型
 * 		4.	对类型中的关键域进行匹配,如非 Double Float的基本类型,直接== 判断,如果是Double Float 要将其转换成 long 或 int 再用 == 进行判断
 * 			对于数组类型的判断,要遍历其中的每一个类型进行判断,可以使用AbstractList 类中的方法
 * 																return (o1==o2) || (o1!=null && o1.equals(o2))
 * 		5.对于修改equals 方法时,总要修改 hashCode 方法
 * 		6.equals方法的参数为Object类型,不要将其修改为其他类型,否则的话,则为重载,而不是重写了
 * 	
 * 
 * /
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值