Java equals 和 “==”
Java 中 ,“==” 和“equals” 经常被误认为是相同的,如下我们来说明下二者的不同点。
1.“==”
是一种运算符。
如果比较的两个元素是基本数据类型,则按照数据内容来比较。
如果比较的两个元素是类的实体,则比较的是两者的地址值。
2. equals()
是一个方法,即只能由类的实例对象来发起使用。
在object类中的代码中可以看出,实际也是“==”运算的实现。
但是String ,Date 和File这三个类重写了equals方法,所以这三个类的实例调用euqals方法时,按照重写代码的内容,实际也是在比较内容值。
其他类如果没有重写equals方法,则比较的还是地址值。
注意,在使用equals方法时,一定要确保前面的对象不是一个null值。null.equals(o)是永远无法返回true的。
3.自定义类如果需要比较类的具体内容,也可以重写equals方法。
@Override public boolean equals(Object o) { if(this == o){ return true; } if(o instanceof Order){ Order x = (Order) o; return x.orderId == ((Order) o).orderId && x.orderName.equals(((Order) o).orderName); } return false; }