Object类是所有类的公共父类
public boolean equals(Object obj):对象比较
Integer a = new Integer(2);
Integer b = new Integer(2);
//a,b都是和堆里开辟的存放“2”的地址建立引用关系
System.out.println(a.equals(b));//true
/**
* boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
* equlas默认的比较的是 堆里地址,和 == 一样,都是比较地址
*/
很多时候我们并不需要比较地址,而是比较内容,所以我们一般会覆写此方法
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return this.value == ((Integer)obj).intValue();
}
return false;
}
String toString() 返回该对象的字符串表示
我们打印对象,其实打印的是对象的toString()方法
对象类型的全限定名 + @ + 对象十六进制的hashCode
一般情况下建议每个类都覆写toString()
我们编写一个Student类,并且没有覆写toString方法
package day3;
class Student
{
private String name;
private String gener;
private Integer age;
public Student(String name, String gener, Integer age) {
super();
this.name = name;
this.gener = gener;
this.age = age;
}
}
public class Test2 {
public static void main(String[] args) {
Student s1 = new Student("Well","male",23);
System.out.println(s1);//day3.Student@8c436b
}
}
发现,打印的内容并非我们想要的内容。在这种情况下,我们应该去覆写其隐含父类Object的toString()方法。
package day3;
class Student
{
private String name;
private String gender;
private Integer age;
public Student(String name, String gender, Integer age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
String str = "[name="+name+",gender="+gender+",age="+age+"]";
return str;
}
}
public class Test2 {
public static void main(String[] args) {
Student s1 = new Student("Well","male",23);
System.out.println(s1);//[name=Well,gender=male,age=23]
}
}
当覆写完toString方法后,便能按照我们的意愿输出结果了。