本博客地址 | GitHub | 更多资源免费下载
各位小伙伴,大家晚上好!今天我给大家带来equals方法的使用,主要从两个方面去讲解:第一种,就是系统提供的类使用equals方法进行比较,另一种就是自定义类使用equals方法进行比较。希望大家喜欢。
既可以比较基本数据类型(不熟悉基本数据的小伙伴点击:Java入门-Java学习路线课程第二课:变量与数据类型 的 java常用的数据类型:),也可以比较引用数据类型(不熟悉引用数据类型的小伙伴点击:Java入门-Java学习路线课程第二课:变量与数据类型 的 java常用的数据类型:)。
注意:基本数据类型比较的是值,引用数据类型比较的是地址值
public boolean equals(Object obj)
package com.javaxyz.equals;
/**
* @ClassName:Student.java
* @Description:学生类
* @Author:DongGaoYun
* @AuthorEnglishName:Andy
* @URL:www.javaxyz.com 或 www.gyun.org
* @Email:[email protected]
* @QQ:1050968899
* @WeiXin:QingYunJiao
* @WeiXinGongZhongHao: JavaForum
* @Date:2019-10-15 下午2:41:24
* @Version:1.0
*
*/
public class Student {
// 属性
private int sid;// 编号
private String sname;// 姓名
// 方法
/**
* @return the sid
*/
public int getSid() {
return sid;
}
/**
* @param sid
* the sid to set
*/
public void setSid(int sid) {
this.sid = sid;
}
/**
* @return the sname
*/
public String getSname() {
return sname;
}
/**
* @param sname
* the sname to set
*/
public void setSname(String sname) {
this.sname = sname;
}
/**
*
*/
public Student() {
}
/**
* @param sid
* @param sname
*/
public Student(int sid, String sname) {
super();
this.sid = sid;
this.sname = sname;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + "]";
}
}
package com.javaxyz.test;
import org.junit.Test;
import com.javaxyz.equals.Student;
/**
* @ClassName:TestStudent.java
* @Description:使用Junit单元测试输出
* @Author:DongGaoYun
* @AuthorEnglishName:Andy
* @URL:www.javaxyz.com 或 www.gyun.org
* @Email:[email protected]
* @QQ:1050968899
* @WeiXin:QingYunJiao
* @WeiXinGongZhongHao: JavaForum
* @Date:2019-10-15 下午2:45:04
* @Version:1.0
*/
public class TestStudent {
@Test
public void test() {
// 创建对象
Student s1 = new Student(1, "小明");
Student s2 = new Student(1, "小明");
// 没有重写equals方法之前,以下两个打印结果都为false,原因就是== 和 equals都是在比较对象的地址值
System.out.println(s1 == s2); // f
System.out.println(s1.equals(s2)); // f
}
}
false
false
package com.javaxyz.test;
import org.junit.Test;
import com.javaxyz.equals.Student;
/**
* @ClassName:TestStudent.java
* @Description:使用Junit单元测试输出
* @Author:DongGaoYun
* @AuthorEnglishName:Andy
* @URL:www.javaxyz.com 或 www.gyun.org
* @Email:[email protected]
* @QQ:1050968899
* @WeiXin:QingYunJiao
* @WeiXinGongZhongHao: JavaForum
* @Date:2019-10-15 下午2:45:04
* @Version:1.0
*/
public class TestStudent {
@Test
public void test() {
// 创建对象
String str1 = new String();
String str2 = new String();
System.out.println(str1 == str2); //f
System.out.println(str1.equals(str2)); //t
}
}
false
true
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
/**
*
*/
package com.javaxyz.equals;
/**
* @ClassName:Student.java
* @Description:学生类
* @Author:DongGaoYun
* @AuthorEnglishName:Andy
* @URL:www.javaxyz.com 或 www.gyun.org
* @Email:[email protected]
* @QQ:1050968899
* @WeiXin:QingYunJiao
* @WeiXinGongZhongHao: JavaForum
* @Date:2019-10-15 下午2:41:24
* @Version:1.0 重写equals方法约定: 两个学生对象:只要id和姓名相同,那么我们就说是同一对象。
*
*/
public class Student {
// 属性
private int sid;// 编号
private String sname;// 姓名
// 方法
/**
* @return the sid
*/
public int getSid() {
return sid;
}
/**
* @param sid
* the sid to set
*/
public void setSid(int sid) {
this.sid = sid;
}
/**
* @return the sname
*/
public String getSname() {
return sname;
}
/**
* @param sname
* the sname to set
*/
public void setSname(String sname) {
this.sname = sname;
}
/**
*
*/
public Student() {
super();
// TODO Auto-generated constructor stub
}
/**
* @param sid
* @param sname
*/
public Student(int sid, String sname) {
super();
this.sid = sid;
this.sname = sname;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + "]";
}
/*
* 重写equals方法
*/
@Override
public boolean equals(Object obj) {
// 提高效率
if (this == obj)
return true;
if (null == obj)
return false;
// 判断类型是否属于Student(注意是本对象)
if (!(obj instanceof Student))
return false;
Student s = (Student) obj;// 向下转型
//判断两个属性值是否相等,如果是数值就用==比较,如果是引用类型就用equals
if (s.getSid() != this.getSid())
return false;
// 如果对象的id和姓名相等,那么就返回true
if (s.getSid() == this.getSid() && this.getSname().equals(s.getSname())) {
return true;
}
return false;
}
}
package com.javaxyz.test;
import org.junit.Test;
import com.javaxyz.equals.Student;
/**
* @ClassName:TestStudent.java
* @Description:使用Junit单元测试输出
* @Author:DongGaoYun
* @AuthorEnglishName:Andy
* @URL:www.javaxyz.com 或 www.gyun.org
* @Email:[email protected]
* @QQ:1050968899
* @WeiXin:QingYunJiao
* @WeiXinGongZhongHao: JavaForum
* @Date:2019-10-15 下午2:45:04
* @Version:1.0
*/
public class TestStudent {
@Test
public void test() {
// 创建对象
Student s1 = new Student(1, "小明");
Student s2 = new Student(1, "小明");
// 没有重写equals方法之前,以下两个打印结果都为false,原因就是== 和 equals都是在比较对象的地址值
System.out.println(s1 == s2); // f
System.out.println(s1.equals(s2)); // f
/*
* 我们先来观察一个String类,源码里有这么一段, public boolean equals(Object anObject) { if
* (this == anObject) { return true; } if (anObject instanceof String) {
* String anotherString = (String) anObject; int n = value.length; if (n
* == anotherString.value.length) { char v1[] = value; char v2[] =
* anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] !=
* v2[i]) return false; i++; } return true; } } return false; }
* 说明String也是重写了equals方法,所以第一个结果为:false 第二个结果为true
*
*/
String str1 = new String();
String str2 = new String();
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
// 改造它
// 注意:比较两个自定义的对象的地址值完全没有意义,要想让它们的比较有意义,就要给它约定一下,
// 写equals方法。让它们去比较内容。也就是说只要Student类的属性sid相等,且sname的值也相等,我们就可以说它们是同一对象,这样我们就可以去重或做其他的业务操作,只有这样才有意义。
// 重写了equals方法之后:第一个结果为:false 第二个结果为true 这样我们程序员用的才有意义
System.out.println(s1 == s2); // f
System.out.println(s1.equals(s2)); // true
}
}
false
true
public boolean equals(Object obj) {
return (this == obj);
}
更多免费资源请关注微信公众号: