Equals()方法体现的编程思想

              在Java中,除接口这个特殊抽象类以外,类Object是所有类的基类。Equals()方法则是Object类中比较重要的方法,用来比较非空引用对象的地址值,返回布尔值。因为Object类中的equals方法当两个被比较的非空引用值x和y只有指向同一对象时才返回True。而在实际开发中,类的对象的地址值一般是不同的,比如我们要比较两个字符串类型的对象S1,S2。它们的地址值不同但是在堆内存中具体的值是相同的。这个时候如果直接用equals比较,返回false明显是不太符合要求的。因此我们常常要重写Object类的equals方法。

 

而在重写方法时,要以怎样的顺序重写才能达到代码最优呢?比如比较两个字符串类型的对象,常见的重写equals方法的步骤是这样的。

1、  判断你要比较的两个对象是否是字符串类型。如果不是,直接返回false。

2、  判断传进来的参数是否是字符串类型。如果不是,直接返回false。

3、  如果是相同类型:

A:把两个字符串都准换成字符数组

B:比较两个字符数组的长度。

C:然后依次比较他们对应位置的元素。

 

public class Equals {
	public boolean equals(Object anObject){
		//this 代表本类对象的引用,判断是否是同一对象
		if (this==anObject){			
			return true;
		}
		
		//如果是同一类型的对象,则比较字符串的长度
		if (anObject instanceof String){
			//对anObject向下转型
			String anotherString=(String) anObject;
			//value在String中的定义
            //private final char[] value
			//字符串 -- 底层字符数组。
			int n=value.length;
			//value.length -- this.value.length -- s1.toCharArray().length
			//把s1字符串转变成了一个字符数组
			//char[] value=s1.toCharArray();
			//char[] value={'h','e','l','l','o'};
			//把字符串s2也转变成了字符数组,然后获取长度,和n进行比较
          	//如果长度相等就进去。
          	//char[] value2 = {'h','e','l','l','o'}; 
            if (n == anotherString.value.length) {
            	//如果长度相同,就进来继续比较。
            	char v1[]=value;	//{'h','e','l','l','o'}
            	char v2[]=anotherString.value;  //{'h','e','l','l','o'}
            	int i=0;
            	
            	//n=5;是字符串的长度
            	
            	while (n--!=0){
            		//n=4,
                	//依次按索引位置比较每一个字符是否相同,如果不同,就返回false.
                	//如果每个索引对应的值都相同,那么整个字符串是相同的。
                    if (v1[i] != v2[i])
                    	return false;
                    i++;
            	}
            	return true;
            }
            
		}
		return false;
	}
	
}

 

在编写代码的时候要时刻注意代码的效率和代码的健壮性,所有重写equals方法的思维是:

1、判断传过来的对象是不是同一个。  //提高效率

2、判断传过来的对象是不是Student类型的。  //提高代码的健壮性。

3、对应的操作。 (向下转型,然后来比较)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值