API中的Object之equals方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cmm0401/article/details/79949501

API 中的 Object 之 equals 方法


1、==    等于运算符
        A:可以比较基本类型:比较的就是值是否相同。

        B:可以比较引用类型:比较的就是地址值是否相同。

2、public boolean equals(Object obj)

        1)指示其他某个对象是否与此对象“相等”。equals 方法在非空对象引用上实现相等关系。
        2)看源码:这个方法,默认情况下,比较的是地址值。
                public boolean equals(Object obj) {
                    return (this == obj) ;
            }

        3)一般来说,比较地址值得意义不大。所以,需要重写该方法:一般都是用来比较一个类的两个对象的成员变量值是否相等。

        4)重写Student类中的equals( ) 方法:

            @Override
            public boolean equals(Object obj) {
                //    return super.equals(obj);
                //    这里要改进,需要比较对象的成员变量值是否相同!所以,这里比较的就是name和age。但是name是字符串类型,比较不能使用 ==,需要使用String类的equal( )方法:

        /*        字符串类的方法:public boolean equals(Object anObject):将此字符串与指定的对象比较,当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。

        */
        //    (1)提高程序的效率:
        if(this == obj)
            return true;
        
        //    (2)提高程序的健壮性:
        //    我先判断一下,如果 obj是Student类的对象,可向下转型进行判断,如果不是,直接返回false。
        //    这时,我们需要判断的是对象是否是某个类的对象?
        //    记住格式:    对象名    instanceof    类名
        //    功能:判断该对象名是不是该类名的一个对象。

       // (3)最终版的最好使用自动生成的。

        if(!(obj instanceof Student)) {
            return false;
        }
        
        Student ss = (Student)obj;
        return this.name.equals(ss.name) && this.age == ss.age;

        5)举例子:**************************************************************

package cn.itcast_03;

public class Student {
	private String name;
	private int age;

	public Student() {
		super();
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		//return super.equals(obj);
		//这里要改进,要比较对象的成员变量是否相同!
		//这里比较的就是name和age。
		//但是name是字符串类型,比较不能使用==,需要使用String类的equal方法。
/*		字符串类的方法:public boolean equals(Object anObject)
 * 		将此字符串与指定的对象比较。
		当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,
		结果才为 true。 
		*/
		
/*		Student ss = (Student)obj;
		if(this.name.equals(ss.name) && this.age == ss.age) {
			return true;
		}else {
			return false;
		}*/
		
		//	提高程序的效率
		if(this == obj)
			return true;
		
		//	提高程序的健壮性
		//	我先判断一下,如果 obj是Student类的对象,可向下转型进行判断,如果不是,直接返回false。
		//	这时,我们需要判断的是对象是否是某个类的对象?
		//	记住格式:	对象名	instanceof	类名
		//	功能:判断该对象名是不是该类名的一个对象。
		
		if(!(obj instanceof Student)) {
			return false;
		}
		
		Student ss = (Student)obj;
		return this.name.equals(ss.name) && this.age == ss.age;
	}
}
*************************************************
package cn.itcast_03;

/**
public boolean equals(Object obj)比较此对象与指定对象。
当且仅当参数不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。 

	==
		A:基本类型:比较的就是值是否相同
		B:引用类型:比较的就是地址值是否相同


	public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。 
	equals 方法在非空对象引用上实现相等关系。
	//看源码:这个方法,默认情况下,比较的是地址值。
	    public boolean equals(Object obj) {
        	return (this == obj);
    }
	 * 一般来说,意义也不大。所有,要重写该方法。一般是用来比较对象的成员是否相等。
	 * 
 * @author asus
 *
 */

public class StudentDemo {
	public static void main(String[] args) {
		Student s1 = new Student("qq",11);
		Student s2 = new Student("ss",22);
		System.out.println(s1 == s2);	//false
		Student s3 = s1;
		System.out.println(s1 == s3);	//true
		
		System.out.println("-----------------");
		System.out.println(s1.equals(s2));	//false
		System.out.println(s1.equals(s3));	//true
		
		System.out.println("-----------------");
		Student s4 = new Student("cmm",26);
		Student s5 = new Student("cmm2",26);
		Student s6 = new Student("cmm2",26);
		System.out.println(s4.equals(s5));	//false
		System.out.println(s5.equals(s6));	//true
		
		System.out.println("-----------------");
		Demo o = new Demo();
		System.err.println(s1.equals(o));
		
	}

}

class Demo {
	
}


2、






阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页