A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杜光 于 2013-7-3 17:47 编辑

"=="和equals方法究竟有什么区别?

评分

参与人数 1黑马币 +5 收起 理由
杜光 + 5 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

6 个回复

正序浏览
==是指引用指向的同一个对象
equals一般用于两个对象的值比较,而非引用比较,但它的缺省实现而是用==来判断的,这个函数需要在自定义的class里自己实现出来。
回复 使用道具 举报
区别如下:
1、如果是基本类型比较,那么只能用==来比较,不能用equals。
如:
  1. public class Test
  2. {
  3. public static void main(String[] args)
  4. {
  5. int a = 1;
  6. int b = 1;
  7. int c = 3;
  8. System.out.println(a == b);//结果是true
  9. System.out.println(a == c);//结果是false
  10. System.out.println(a.equals(b));//编译不能通过,因为equals方法不能运用于基本类型的比较
  11. }
  12. }
复制代码
2、对于基本类型的包装类型,比如:BooleanCharacterByteShotIntegerLongFloatDouble等的引用变量,==是比较地址的,而equals是比较内容的。
如:
  1. public class Test2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Integer a1 = new Integer(3);
  6.                 Integer a2 = new Integer(3);
  7.                 Integer a3 = new Integer(1);
  8.                 System.out.println(a1 == a2);//false:两个不同的Integer对象,其地址不同。
  9.                 System.out.println(a1 == a3);//false:
  10.                 System.out.println(a1.equals(a2));//true: a1与a2指向的对象中的内容是相等的,都是3。
  11.                 System.out.println(a1.equals(a3));//false: 因对象内容不一样。
  12.         }
  13. }
复制代码
回复 使用道具 举报
为了更好的维护论坛的学习氛围,如果您的的问题“已经解决”请即时将帖子状态改成“已解决”

-------------------坚持学习,黑马因你而精彩---------------
回复 使用道具 举报
==用来判断两个基本数据类型相等,如果它们的值一样,则就相等,也可用来判断两个引用数据类型的相等,如果它们的地址指向同一个,则相等
回复 使用道具 举报
基本数据类型进行比较时用“==”
string类型进行比较时:
1·“==”比较的是地址值
2·equals()比较的是堆内存中的内容
回复 使用道具 举报
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

     如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

     equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:

     String a=new String("foo");

     String b=new String("foo");

     两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

     在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals方法。

     如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:

     boolean equals(Object o){

     return this==o;

}

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

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马