一、 ==运算符和equals的区别
== 可以使用在基本数据类型变量 和引用数据类型变量
如果比较的是基本数据类型变量;比较两个变量保存的数据是否相等。(不一定类型相等),对于引用类型就是比较内存地址
equals 它是属于java.lang.object类里面的方法,如果该方法没有被重写过默认也是==
String类的equals方法是被重写过的,所以 String equals时会为true
Object类中 equals()的定义
public boolean equals(Object obj) { return (this == obj); }
object类中定义的equals和==的作用是相同的,比较两个对象的地址值是否相同;
String、Date File包装类都重写了equals方法,比较的不是两个引用的地址是否相同,而是比较两个对象的 实体内容是否相同。
public class Order { private int orderId; private String orderName; public int getOrderId() { return orderId; } public void setOrderId(int orderId) { this.orderId = orderId; } public String getOrderName() { return orderName; } public void setOrderName(String orderName) { this.orderName = orderName; } public Order(int orderId, String orderName) { super(); this.orderId = orderId; this.orderName = orderName; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + orderId; result = prime * result + ((orderName == null) ? 0 : orderName.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Order other = (Order) 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; } }
public class EqualsTest {
public static void main(String[] args) {
int i=1;
double k=1;
System.out.println( i==k);
Order or1=new Order(1,"aa");
Order or2=new Order(1,"aa");
//若用两个对象==则是为false的
System.out.println(or1==or2);
System.out.println(or1.equals(or2));
}
}
结果:true
false
true