一、“==” 的使用
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;
}