JAVA基础篇(12)——【重写object中的toString,equals方法】

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;
	     }
	}  
}

结果:

发现的确可以比较两个对象中值是否相等!

推荐博友们自己拿两个例子来事实重写这两个方法,能更好的理解!

猜你喜欢

转载自blog.csdn.net/qq_39077728/article/details/81254162