0
点赞
收藏
分享

微信扫一扫

面试题: “==” 和equals()的区别

目标践行者 2022-03-15 阅读 83
javaeclipse

一、“==” 的使用

1.== 是一个运算符 既可以使用在基本数据类型变量,又可以使用于引用数据类型变量中,对于基本类型就是比较值(不一定类型要相同),对于引用类型就是比较内存地址,即两个引用是否指向同一实体

二、equals()方法

1.是一个方法,而非运算符

2.只适用于引用数据类型

3.Object类中equals()的定义

                public boolean equals(Object obj) {
                        return (this == obj);
                  }

说明:Object类中定义的equals()方法和==的作用是相同的,比较两个对象的地址值是否相同,即两个引用是否指向同一实体

4.像String、Date、File、包装类等都重写了equals()方法,重写以后,比较的就不是两个引用地址值是否相同,而是比较两个对象的实体内容是否相同

5.通常情况下 ,我们自定义类如果使用equals()的话,也通常是比较两个对象的 “实体内容” 是否相同。那么我们就需要对Object类中的equals()进行重写

	@Override
    //手动生成
	public boolean equals(Object obj) {
		if(this == obj) {//如果当前对象的引用地址和形参的引用地址一样 即二者肯定指向同一对象
			return true;
		}
		if(obj instanceof Orders){//判断obj是否是Orders类型  如果是 先强转下来 转成我俩都是Order类型
			Orders order = (Orders)obj; //如果不转型 Orders   Orders类里面的一些属性无法使用
			//最后比较两个对象的每个属性的内容  引用数据类型必须用equals
			return this.orderId == order.orderId && this.orderName.equals(orderName);
		}
		return false;
	}
	@Override
    //自动生成
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Orders other = (Orders) obj;
		if (orderId != other.orderId)
			return false;
		if (orderName == null) {
			if (other.orderName != null)
				return false;
		} else if (!orderName.equals(other.orderName))
			return false;
		return true;
	}

举报

相关推荐

0 条评论