“==”与“.equals()”

来源:互联网 发布:个人数据融合算法 编辑:程序博客网 时间:2024/05/20 23:39

“==”:是运算符。如果两个变量是基本数据类型,因为==为运算符,会强制转型,则只要两个变量的值相等,就返回true;对于两个引用数据类型变量,比较的是地址,必须指向同一个对象,才会返回true。



“.equals()”:是Object类的方法。

1.没有重写equals方法:Object比较的是地址,与“==”没有区别

2.重写了equals方法:如String、Integer、Date等。就直接比较值是否相等,如果相等返回true.



【注意】:

1.在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果

2.基本数据类型不支持equals方法



当基本包装类型比较时:

“==”:Integer和int,Long和long比较,会拆箱;如有一方为非包装类,Integer和double比较,也会拆箱;如有两方都为包装类,Double和Integer比较,在不遇到算数运算的情况下,均不会拆箱,编译会报错。

“.equals()”:不处理数据转型,如有两方都为包装类,Double和Integer比较,两个为不同的类型,编译会报错。


自动拆装箱:Java编译器在基本数据类型和对应的对象包装类型之间做一个转换。

8种基本数据类型:byte   short   int          long   float    double  char            boolean

对应的包装类型:  Byte   Short  Integer  Long  Float  Double  Character  Boolean

对于Integer对象,JVM会自动缓存 -128~127 范围内的值,在这个范围内的值相等


例1:

    


i01==i02;  正确,i02是基本数据类型,i02会拆箱成int,所以i01和i02都是基本数据类型,直接比较值。

i01==i03;  正确,i02与i03都是引用传递,指向同一个对象实例,所以地址相同

i03==i04 ; 错误,i03与i04地址不同,所以不相等

i02==i04;  正确,与第一个相同


例2:

Integer i = 42;

Long l = 42l;

Double d = 42.0;


i==l;  i==d;  l==d;  错误,不会拆箱,不是同一个类型,编译报错。

i.equals(d);  d.equals(l);  i.equals(l);  错误,编译通过,但是equals不会数据转型,不是同一个类型。



原创粉丝点击