Object类中equals方法和toString方法的重写问题

(week6-Saturday)

Object类

1、Object类概述(具体查看API文档)
         Object类是所有类的父类
         若一个类未使extends明确标识继承关系,会默认继承Object类(包括数组)
         Java中每个类都可以用Object类定义的方法
   
2、Object类中的 equals方法toString方法
     说明:Object类中定义的"equals方法"和"toString方法"往往不能满足我们所想要的逻辑需求,需要我们自行在需要调用该方法的类中对"equals方法"和"toString方法"进行方法重写


----2.1 equals方法
   1、先看一下 API文档中关于Object类中"equals"方法的说明:
       该equals类方法Object实现对象上差别可能性最大的相等关系; 也就是说,对于任何非空参考值x和y,
   当且仅当x和y引用相同对象(x == y具有值true)时,该方法返回true 。


   2、于是涉及到 equals方法与"=="的关系:
       对于两个对象,当这两个对象指向同一块内存空间时,这两个对象才可用"=="连接,否则会返回false, 而未经过重写的equals方法与"=="的效果相同。
   
   3、equals方法 重写(重点)
我们常常需要判断的是两个对象中的元素值是否完全相同,因此我们需要在类中重写equals方法的逻辑判断,使其满足我们的需求   

   

                重写如下(在自定义类Speciality中对其进行重写):

               /**
		 * 重写Object类中的equals方法
		 * @param object
		 * @return
		 */
		public boolean equals(Object object){
			if(object == this){
				return true;
			}
			if(object instanceof Speciality){
				Speciality speciality = (Speciality) object;//强制转换
				if(this.getName()==speciality.getName()&&this.getYear()==speciality.getYear()
						&&this.getNumberId()==speciality.getNumberId()){
					return true;
				}
			}
			return false;
		}


----2.2 toString方法

   1、API文档中关于toString方法的说明:
      该toString类方法Object返回一个由类的名称,其中所述对象是其实例,该符号字符`的字符串@ ”,并且对象的哈希码的无符号的十六进制表示。
   换句话说,这个方法返回一个等于下列值的字符串: getClass().getName() + '@' + Integer.toHexString(hashCode())
   

   2、对象直接调用原Object类中的toString方法时,输出的是一串地址字符串直接调用该方法输出的还是字符串,因此需要在类中重写Object方法使得能够以字符串的形式输出类中的元素值。

           3、总结(在调用输出函数的基础上):
  3.1、输入对象名时,默认直接调用类中的toString方法
  3.2、字符串变量继承Object类中的toString方法,输出的是对象的字符串表现形式
  3.3、子类可以重写toString方法改变输出的表现形式

发布了12 篇原创文章 · 获赞 39 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/sjq__python_web/article/details/80542866