黑马程序员技术交流社区

标题: 虚方法和静态方法 [打印本页]

作者: guobin_lu    时间: 2013-3-31 23:22
标题: 虚方法和静态方法
  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 有什么不同?

作者: HM刘磊    时间: 2013-4-1 00:13
简单来说,就是  ==是进行值类型比较是否相等,
而equals是进行引用类型比较是否相等的,
拙见,见谅
作者: 张振    时间: 2013-4-1 00:35
“==“比较两个变量额值,其中真正是比较两个变量内存中的地址是不是相同,(它们值相同 但值的地址不相同)老师视频中有讲过指针这个概念
即栈中的内容是否相同
”Equals“比较是的两个对象指向的地址的值是不是相同,主要是object是引用类型
即堆中的内容是否相同
所以 O1==O2false
另外一个true
作者: 郑丹丹1990    时间: 2013-4-1 08:16
学习了。。。。
作者: 管章鹏    时间: 2013-4-1 19:00
“==”是看两个对象是否是同一个对象,也就是两个对象引用是否指向同一个对象当然如果用于int,long,double就不是看两个值是否相等了。

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

如果你的类中的域有对象引用,那么你需要重写equals()
因为Object的equals()的工作实质是对你的所有的域进行“==”比较历遍,所以如果你的域有对象引用,“==”比较就又变成了对域的对象引用是否指向同一个对象了
作者: 曾玉锋    时间: 2013-4-1 20:34
==:对于比较的两个变量,如果这两个变量在栈中存储的值相同,则为true,否则为false。值类型的两个变量只要值相同就为true,否则为false;同理,引用类型的两个变量,只要引用地址相同就为true,否则为false;
equals() 是在object基类中定义的虚方法,可重写。所以,对于重写了equals()方法的类的对象,比较结果并不能确定,具体结果看该类是否重写了equals方法。
一般来说,只要==比较结果为true,则equals比较的结果也为true;==比较的结果为false,equals比较的结果可能为true,也可能为false




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2