黑马程序员——关于java中equals和==的区别

来源:互联网 发布:尾崎小野相关介绍 知乎 编辑:程序博客网 时间:2024/06/03 02:03

 -------android培训、java培训、java学习型技术博客、期待与您交流! ----------

"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.



基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 
  他们之间的比较,只能用双等号(==),比较的是他们的值 


复合数据类型(类) 
  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,
总之,"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.




 对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,Object类的equals方法的实现代码如下:
boolean equals(Object o)
{return this==o;}所以比较后的结果跟双等号(==)的结果相同。


       ④equals方法。用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,他们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b即返回false,而这两个对象中内容是相同的,所以,表达式a.equals(b)将返回true。


       在实际开发中,我们经常要比较传递进行来的字符串内容是否相等,许多人稍不注意就使用==进行比较了,这是错误的,有大量这样的错误。记住,字符串的比较基本都是使用equals方法。
       ⑤如果一个类没有定义equals方法。它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
boolean equals(Object o){
return this==o;
}

这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是比较两个变量指向的对象是否是同一个对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可以认为两个对象的内容是相同的。

-------android培训、java培训、java学习型技术博客、期待与您交流! ----------


0 0
原创粉丝点击