Java中 equals与’=='的比较 以及重写equals通过对实例对象以及字符串来进行相关展示
首先我们创建一个简单的类Person 并创建子类Student:
class Person{
public String name;
public int age;
Person(String name,int age){ //构造方法来初始化
this.name=name;
this.age=age;
}
}
class Student extends Person{
Student(String name,int age){ //承接父类的构造方法
super(name, age);
}
}
在主方法中我们创建两个person对象,并且其中的内容相同:
public class Test {
public static void main(String[] args) {
Person p1=new Person("zs",18);
Person p2=new Person("zs",18);
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
}
}
结果如下:
我们再用两种方式创建两组字符串:
第一种:
String s1="asd";
String s2="asd";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
结果是 true true
第二种:
String s1="asd";
String s2=new String("asd");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
结果却是 false true
下面来看一下代码;
public static void main(String[] args) {
Person p1=new Person("zs",18);
Person p2=new Person("zs",18);
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
System.out.println(p1);
System.out.println(p2);
输出结果是:
我们对equals方法和toString进行重写:
及将equals改为只要两个实例中的内容相同即为true
将toString改为通过一定格式输出 而不是地址
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public String toString(){
return name+","+age;
}
结果为:
我们注意到两个实例虽然不是同一个但是判定为true,在输出实例名时输出了成员内容而不是地址。