object的定义:
object类似类层次结构的根类。每个类都使用object作为超类(父类)。所有对象都可以显示这个类的方法。
(1)toString
在需要将一个对象的内容显示的输出到显示器上面时,通常都需要调用toString方法,使其以字符串形式展示出来,在java中提供了toString()方法,但是它输出的是对象得首地址,我们一般想要的结果并不是这样,因为Object类的toString()方法总是返回对象的所属类的类名 + @ + hashCode值,若想要输出自定义信息,必须重写toString。
例如:
public class toStringTest {
public static void main(String[] args) {
student s = new student("张好人",22,175);
System.out.println(s.toString());
}
static class student{
private String name;
private int age;
private int high;
public student(){};
public student(String name,int age,int high){
this.name=name;
this.age =age;
this.high = high;
}
}
}
未重写toString返回结果如下:
重写toString后:
public class toStringTest {
public static void main(String[] args) {
student s = new student("张好人",22,175);
System.out.println(s.toString());
System.out.println(s);//直接输出对象名也能打印出相同的结果
}
static class student{
private String name;
private int age;
private int high;
public student(){};
public student(String name,int age,int high){
this.name=name;
this.age =age;
this.high = high;
}
public String toString(){//重写toString
return "name:"+name+",age:"+age+",high"+high;
}
}
}
输出:
(2)equals
它是比较两个对象是否相等,并不能比较两个对象中内容是否相等,要比较内容,肯定要重写equals方法
例如:
我们将主函数做如下修改:
public static void main(String[] args) {
student s = new student("张好人",22,175);
System.out.println("返回第一个对象内容:"+s.toString());
student s1 = new student("张好人",22,175);
System.out.println("返回第二个对象内容:"+s1.toString());
boolean b = s.equals(s1);
System.out.println("比较两个对象的返回值:"+b);
}
输出:
分析:为啥呢,内容是相等的,为啥返回false?因为未重写的equals比较的是两个对象,或者说是对象的地址,两个不同对象地址肯定不同。
但是我们将equals重写了,修改程序如下:
public class toStringTest {
public static void main(String[] args) {
student s = new student("张好人",22,175);
System.out.println("返回第一个对象内容:"+s.toString());
student s1 = new student("张好人",22,175);
System.out.println("返回第二个对象内容:"+s1.toString());
boolean b = s.equals(s1);
System.out.println("比较两个对象的返回值:"+b);
}
static class student{
private String name;
private int age;
private int high;
public student(){};
public student(String name,int age,int high){
this.name=name;
this.age =age;
this.high = high;
}
//重写equals
public boolean equals(Object object){
if(object==null)return false;//如果传进来的是空对象
if(this==object)return true;//如果两个对象地址相等
if(object instanceof student){//如果两个对象是同一个类型的对象
student newobject =(student) object;
if(!this.name.equals(newobject.name))return false;
if(!(this.age==newobject.age)) return false;
if(!(this.high==newobject.high)) return false;
return true;
}
return false;
}
public String toString(){//重写toString
return "name:"+name+",age:"+age+",high"+high;
}
}
}
结果:
发现的确可以比较两个对象中值是否相等!
推荐博友们自己拿两个例子来事实重写这两个方法,能更好的理解!