【java】重写Object类中euals方法和toString方法

一、Object类

Object类是java中所有类的超类,可以使用 Obect 类型的变量引用任何类型的对象

注意:java中只有基本类型(字符,数值,布尔)不是对象,其他包括数组都是对象

(1)equals 方法

Object类中equals() 方法用于判断两个对象是否具有相同的引用,一般无意义,而是常常需要检测两个对象状态的相等性。

使用 instanceof 代码示例:

	@Override
	public int hashCode() {
		return Objects.hash(name, salary);
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Employee))
			return false;
		Employee other = (Employee) obj;
		return Objects.equals(name, other.name)
				&& Double.doubleToLongBits(salary) == Double.doubleToLongBits(other.salary);
				//other.getSalary()==getSalary()
		
		}
	

使用 getClass() 代码示例:

	@Override
	public int hashCode() {
		return Objects.hash(name, salary);
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Employee other = (Employee) obj;
		return Objects.equals(name, other.name)
				&& Double.doubleToLongBits(salary) == Double.doubleToLongBits(other.salary);
				//other.getSalary()==getSalary()
				
	}
instanceofgetClass()
是否属于该类或者其子类是否是同一个类,不考虑继承
由继承父类的唯一特征决定,ID,身份证等子类有自己的相等概念
可以父子类做比较只能同一个类进行比较
  • 使用==比较基本类型域
  • 使用equals比较对象域
  • Arrays.equals() 比较数组

注:==与equals区别
基本数据类型: ==比较值不比较地址,不能使用equals
引用数据类型: ==比价地址,equals比较值

  • Objects.equals(a,b)如果ab都为null,返回true;其中之一为null,返回false;否则返回e.equals(b)
  • 重新定义equals方法必须重新定义hashCode方法,以便用户可以将对象插入到散列表中

(2)toString方法

Object类中的toString方法打印输出类名和散列码,大多数情况需要这样定义格式:类名,方括号括起来域值Employee [name=a, salary=1.0]

Employee中代码示例:

	@Override
	public String toString() {
		return getClass().getName()+" [name=" + name + ", salary=" + salary + "]";
	}

Manager中代码示例:

	@Override
	public String toString() {
		return super.toString()+"[bonus=" + bonus + "]";
	}
  • 只要对象与一个字符串用“+“连接,就自动调用toString方法
  • println会直接调用toString方法
  • 应该为每一个类重写toString方法

注:数组继承了Object类的toString,所以会照旧打印。解决方法就是使用Arrays.toSting() 方法

  • getClass().getName() 返回对象类名
  • getClass.getSuperclass() 返回对象超类名
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值