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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

       equals 比较俩对象是否相等。  但是  ==  也能比较吧
为什么还要equals。    我就搞不明白啊......

7 个回复

倒序浏览
本帖最后由 钟成军 于 2014-5-4 02:20 编辑

equals比较的是两个对象的内容是否相等
==比较的是两个变量的值是否相等

String str1 = "abc";
String str2 = new String("abc");

System.out.println(str1 == str2);//false
System.out.println(str1.equals(str2));//true

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
1.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
2.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。
3.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
4.一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。
对于String和Integer来说,由于他们特有的创建对象的方式。使用构造器和不使用构造器得到一个对象,==方法比较所产生的结果是不同的
==和equals的实质。
       在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。
       基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。
       java.lang包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等。
       其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true。
       =="和"!="比较的是地址.而equals()比较的是对象内容.或者说,,"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.
  1. public class Test
  2.         {
  3.                 public static void main(String[] args)
  4.                         {
  5.                                 String a = new String("abc");
  6.                                 String b = new String("abc");
  7.                                 String c = "abc";
  8.                                 String d = "abc";
  9.                                 System.out.println(a == b);// a和b是不同的对象 false
  10.                                 System.out.println(c == d);//true
  11.                                 System.out.println(a.equals(b));// a和b内容相同true
  12.                         }
  13.         }
复制代码



评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
trhthyj 来自手机 中级黑马 2014-5-4 07:35:58
板凳
equals是可以被复写的,比如字符串的equals就被复写过,比较的是字符串是否相同,而==比较的是地址值。
回复 使用道具 举报
1,"equals"比较的是两个对象是否相等(即对象里对应的属性是否对应的相等),而在字符串中String类中复写了equals方法,比较两个字符串的内容是否相等。
2."=="一般比较的是基本数据类型的值和引用类型的对象是否相等,引用类型指的是对象的别名指向堆中的变量,实质就是堆中对象的地址储存在栈中。
3,当比较栈中的内容是否相等时用"=="进行比较比较;当比较堆中的内容是否相等时,用equals进行比较。基本数据类型以及引用类型储存在栈中,数组以及new出来的对象储存在堆中。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
==和equals比较:
共同点:都是用来做判断的,烦会类型都是boolean;
区别:
1、==是一种符号,是比较运算符,
而equals是一种方法,存在于类中
2、==既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是变量的值,引用数据类型比较的是地址值;
而equals只能用于引用数据类型的比较,在没有重写object中equals方法时,比较的是地址值,重写之后比较的是对象中的属性
希望对楼主有所帮助
回复 使用道具 举报
==是看两个对象是否是同一对象,也就是两个对象的引用是否是指向同一个对象(即java分配的内存地址是否一样),而equals()是比较两个对象的内容是否相等。
回复 使用道具 举报
当有人给你回复后,请及时把帖子编辑为提问结束,这样版主才可以给你加分。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马