object类中的equals与自定义equals方法详解

         object类中的equals与自定义equal方法详解

 

1.this怎么理解?this == obj表示什么?

this就是当前你new出来的对象,这里指谁调用equal方法this指的就是谁,obj是传入参数即Object类型的类。
this == obj表示你传的对象是否和当前你要比对的对象是否相等

2.使用关系运算符==判断两个变量是否相等时:


1)如果两个变量相等,说明这两个变量引用堆中同一个对象
2)如果想要判断堆中两个对象的内容是否一样,即各个成员变量的值是否一样,需要重写equals()方法,根据哈希约定,如果两个对象的
equals()相等,那么这两个对象的hashCode()也相等,即在重写equals()方法的同也重写hashCode()。

3.Object 类中的 equals() 方法

/*Object 类中的 equals() 方法*/
	Object 类中的 equals() 方法
	public boolean equals(Object obj) {
	    return (this == obj);
	}

4.自定义 euqals() 方法

/*自定义 euqals() 方法*/
	public boolean equals(Object obj) {
		/*
		 *第一种情况:当前对象的类与参数对象的类一样
		     persion p1 = new persion("小红",28,"女");
		     persion p3 = p1;
		     System.out.println(p1.equals(p3));
		     谁调用equal方法this指的就是谁,这里this指的是p1。
		 */
		if (this == obj) 
			return true;
		/*
		 * 第二种情况:参数对象为null
		      p3 = null;
		      System.out.println(p1.equals(p3));
		 */
		if (obj == null)
			return false;
		/*
		 * 第三种情况:当前对象的类与参数对象的类不一样
			String s1 = “hello”
			System.out.println(p1.equals(p3));
			注意:getClass():返回对象的运行实例(准确说是字节码文件)
		 */
		if (getClass() != obj.getClass())
			return false;
		/*
		 * 第四种情况:都是persion对象,但是他们里面字段不一样,也返回false
			persion p1 = new persion("小红",28,"女");
			persion p3 = new persion("张三,28,"男");
			System.out.println(p1.equals(p3));
		 */
		persion other = (persion) obj;//obj为object类型,需要强制转换为persion类型
		/*判断age*/
		if (age != other.age)//年龄不相等返回false
			return false;
		/*判断gender*/
		if (gender == null) {
			if (other.gender != null)//当前对象的gender为null,参数对象的gender不为null,返回false
				return false;
		} else if (!gender.equals(other.gender))//当前对象的gender不为null,但与参数对象的gender不相等,返回false
			return false;
		/*判断name*/
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

5.执行结果

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页