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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© guobin_lu 中级黑马   /  2013-3-31 23:22  /  1561 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. string s1 = new string(new char[] { 't', 'e', 's', 't' });
  2.             string s2 = new string(new char[] { 't', 'e', 's', 't' });
  3.             object o1 = s1;
  4.             object o2 = s2;
  5.             Console.WriteLine(o1 == o2);
  6.             Console.WriteLine(o1.Equals(o2));
复制代码
==跟Equals 有什么不同?

评分

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

查看全部评分

5 个回复

倒序浏览
简单来说,就是  ==是进行值类型比较是否相等,
而equals是进行引用类型比较是否相等的,
拙见,见谅
回复 使用道具 举报
“==“比较两个变量额值,其中真正是比较两个变量内存中的地址是不是相同,(它们值相同 但值的地址不相同)老师视频中有讲过指针这个概念
即栈中的内容是否相同
”Equals“比较是的两个对象指向的地址的值是不是相同,主要是object是引用类型
即堆中的内容是否相同
所以 O1==O2false
另外一个true

评分

参与人数 1技术分 +2 收起 理由
苏波 + 2

查看全部评分

回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
“==”是看两个对象是否是同一个对象,也就是两个对象引用是否指向同一个对象当然如果用于int,long,double就不是看两个值是否相等了。

equals()是比较两个对象的内容是否相等,一般如果用户自己不定义针对自己的类的equals()方法,那么就会使用Object的活着你的类的父类的这个方法。如果你的类里没有对象引用的域,就不必要覆盖equals()(注意String域也是对象)String有自己的equals()方法(它已经覆盖了Object的该方法了。

如果你的类中的域有对象引用,那么你需要重写equals()
因为Object的equals()的工作实质是对你的所有的域进行“==”比较历遍,所以如果你的域有对象引用,“==”比较就又变成了对域的对象引用是否指向同一个对象了

评分

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

查看全部评分

回复 使用道具 举报
==:对于比较的两个变量,如果这两个变量在栈中存储的值相同,则为true,否则为false。值类型的两个变量只要值相同就为true,否则为false;同理,引用类型的两个变量,只要引用地址相同就为true,否则为false;
equals() 是在object基类中定义的虚方法,可重写。所以,对于重写了equals()方法的类的对象,比较结果并不能确定,具体结果看该类是否重写了equals方法。
一般来说,只要==比较结果为true,则equals比较的结果也为true;==比较的结果为false,equals比较的结果可能为true,也可能为false

评分

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

查看全部评分

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