equals方法

发布时间 2023-06-08 20:32:17作者: 姜姜萸
//Student3类
public class Student3 {
private String name;
private int age;

public Student3() {
super();
}

public Student3(String name, int age) {
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;
}
/* 需求:equals方法的重写
让student2在用equals比较的时候,去比较对象的内容(比较对象的成员变量的值),对象内容一样输出ture
*/

//同一个类的对象的字节码文件对象是同一个
  //下面这是源码
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student3)) return false;
Student3 student3 = (Student3) o;
return getAge() == student3.getAge() && getName().equals(student3.getName());
}
/* 需求:equals方法的重写
让student2在用equals比较的时候,去比较对象的内容(比较对象的成员变量的值),对象内容一样输出ture
*/
    public boolean equals1(Object o) {
//一般情况下equals要重写,但不需要手动重写
//比较本对象和obj对象的成员变量是否一致
//1.要把oject类向下转型(多态)
Student3 s = (Student3)o;
//因为age是int基本数据类型,所以直接用==比较是一样的
if((this.name.equals(s.name)) && (this.age==s.age)){
return true;
}else{
return false;
}
}

}

//测试类
/*
* public boolean equals(Object obj)指示一些其他对象是否等于此。
* true如果此对象与obj参数相同; false否则。
==的使用
1.==两边是基本数据类型,比较的是两个数的值
int i = 10;
int j = 10;
i == j; true
2.==两边如果是引用数据类型,比较的是两个对象的内存地址

* equals方法
* 1.如果不重写,他内部都是用==比较两个对象,一般equals是要重写的
* String类的equals的方法比较的是字符串的内容
* 因为String继承自Object类,并且里面重写了equals方法
*
* 需求:
* 让student2在用equals比较的时候,去比较对象的内容(比较对象的成员变量的值)
*/
public class Student3_Test {
public static void main(String[] args) {
Student3 s1 = new Student3("陈言",18);
Student3 s2 = new Student3("陈言",18);
Student3 s3 = s1;
Student3 s4 = new Student3("陈言",19);
//比较s1和s2是否相等,==比较的是两个对象的内存地址
System.out.println(s1==s2);//FALSE
System.out.println(s1==s3);//TRUE

// equals方法没有重写,那么比较的是内存地址(==)
System.out.println(s1.equals(s2));//FALSE 重写equals后TRUE
System.out.println(s1.equals(s3));//TRUE
System.out.println(s1.equals(s4)); //重写equals后 FALSE内容不一样

System.out.println("-------------------");
String str1 = "helloworld";
String str2 = "helloworld";

System.out.println(str1==str2); //TRUE 比较的是字符串的内容
System.out.println(str1.equals(str2));//TRUE 比较的是字符串的内容

String str3 = new String("helloworld");//new也是创建字符串的一种形式,不同的对象
String str4 = new String("helloworld");
System.out.println(str3.equals(str4));//String类的equals比较的是内容TURE
System.out.println(str3==str4);//对于引用类型==比较的是内存地址值FALSE
}
}