==与equals的主要区别是:
==:
- ==常用于比较原生类型(基本数据类型):byte,short,char,int,long,float,double,boolean,比较的是他们的值。
- 若用==来比较两个对象,则比较的是这两个对象的内存地址。因此,除非是同一个new 出来的对象,比较结果为true,不同对象用==比较都是false。
- 但是,对于拥有缓存机制的对象,例如Integer、Byte 、Short 、Long、 Character对象(目前就知道这几个对象),在其缓存范围内,是可以用==比较出正确的结果的。具体范围是:Integer、Byte,Short,Long 固定范围是:-128 到 127;Character 固定范围是 0 到 127。除了 Integer 可以通过参数改变范围外,其它的都不行。 具体可见我转发的博文理解Java Integer的缓存策略【转】
equals()方法:
在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,源码如下:
public boolean equals(Object obj) {
return (this == obj);
}
因此,对于没有重写过equals()方法的对象来说,使用equals()进行比较和用==进行比较效果相同,都是比较内存地址
但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。因此,当我们创建自己的类的时候,若要将此类进行比较,一定要重写equals()方法