equals()和==的区别
equals()和==的区别
总结:
1)对于==,比较的是 值 是否相等
如果作用于 基本数据类型 的变量,则直接比较其 存储的 “值” 是否相等;
如果作用于 引用类型 的变量,则比较的是 所指向的对象的地址
2)对于equals方法,
注意:equals方法不能作用于 基本数据类型的变量,
equals继承Object类,比较的是是否是 同一个对象
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
注:不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同
好记:
== 的作用:
基本类型:比较 值 是否相同
引用类型:比较 地址值 (堆内存地址) 是否相同
equals 的作用:
引用类型:默认情况下,比较的是 地址值。
基本类型:比较 值 是否相同
引用类型:比较 地址值 (堆内存地址) 是否相同
equals 的作用:
引用类型:默认情况下,比较的是 地址值。
equals方法 不能 作用于 基本数据类型的变量
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。
一、java当中的数据类型和“==”的含义:
- 基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。
- 引用数据类型(即复合数据类型(类) ):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。所以除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。
JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
二、 String类的equals()方法:
解释比较 字符串 中“==”和equals()的区别?
- ==:比较的是两个字符串 内存地址(堆内存)的数值是否相等,属于数值比较;
- equals():比较的是两个字符串的 内容,属于内容比较。
好记总结:
==比较的是 两个对象的地址
equals ()比较的是 两个对象的内容
以后进行字符串相等判断的时候都使用equals()。
参考博客:
http://www.cnblogs.com/smyhvae/p/3929585.html
http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html
http://www.cnblogs.com/zhxhdean/archive/2011/03/26/1996468.html
http://www.cnblogs.com/zhxhdean/archive/2011/03/26/1996468.html
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。