| 
 
积分40186好友记录主题帖子听众收听 
 | 
 
| 先是从 无法浏览网页(1250623166) 10:42:34 的提问开始 -------------------------------------------------------------------------------------------------------------------------------
 无法浏览网页(1250623166) 10:42:34
 string greeting ="Hello";
 greeting.substring(0,3) == "Hel"  是true还是false?
 无法浏览网页(1250623166) 10:42:34
 string greeting ="Hello";
 greeting.substring(0,3) == "Hel"  是true还是false?
 瞌睡虫(719367804) 10:51:30
 true
 瞌睡虫(719367804) 10:51:46
 guess
 无法浏览网页(1250623166) 10:52:57
 我也是迷糊的
 无法浏览网页(1250623166) 10:53:18
 感觉上面是true 应为我自己也是这样使用的
 W@lf(326335) 10:53:19
 运行下不就知道结果了吗?
 无法浏览网页(1250623166) 10:53:25
 而且没有出现没有错误
 无法浏览网页(1250623166) 10:53:34
 而且一直是这样写代码的
 无法浏览网页(1250623166) 10:53:39
 但是
 无法浏览网页(1250623166) 10:54:13
 我在看java书籍中告诉我
 无法浏览网页(1250623166) 10:54:16
 
   无法浏览网页(1250623166) 10:54:53
 我想弄清楚java和net两个对== 和equals 是否是一致的
 无法浏览网页(1250623166) 10:55:05
 到底是比较值还是比较引用
 瞌睡虫(719367804) 10:56:30
 我印像中==是引用,equals是值,但是是在C#中
 无法浏览网页(1250623166) 11:02:49
 很多C#的教材都会强调对象相等的概念。我们都知道,在C#的世界里存在两种等同性。一种是逻辑等同性:如果两个对象在逻辑上代表同样的值,则称他们具有逻辑等同性。另一种是引用等同性:如果两个引用指向同一个对象实例,则称他们具有引用等同性。
 众所周知,Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等。Object的Equals的默认实现比较的是两个对象的引用等同性。而Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性。也就是说,在C#里,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性。当然,这并不总能满足我们的要求。所以每当我们更在意引用类型的逻辑等同性的时候,我们就应该重写Equals方法。
 重写引用类型的Equals方法以改变其默认的比较方式的一个著名例子是String类。当我们写出string1.Equals(string2)这样的代码时,我们比较的不是string1和string2这两个引用所指向的是否为同一个实例(引用等同性),而是比较string1与string2所包含的字符序列是否相同(逻辑等同性)。
 无法浏览网页(1250623166) 11:07:23
 object对象的equals默认实现是比引用对象是否相等。
 object的派生对象valuetype重写了equals方法 比较值是否相等。
 
 引用类型对象  默认情况下 操作符== 比较的是引用对象 和equals一致。
 值类型对象 如果没有重写 操作符== 是会得到编译错误。
 无法浏览网页(1250623166) 11:11:41
 所以总结以上情况:
 在编写代码的时候 使用equals  比使用 == 要好些。
 无法浏览网页(1250623166) 11:15:05
 大家说说意见
 [洛阳] 季末ˇ<gexiaoliang@vip.qq.com> 11:15:35
 @无法浏览网页不用纠结这个,Java 的 String 类 和 .Net 的 string 类型 在 Equals 和 == 的处理是不一样的 Java 中 一个是比较值 和 比较引用 而在 .Net 中都是比较值 .Net 中对 string 的 == 进行了重写 实现方式和 Equals 一样 而 Java 中没有这样做
 [郑州] 苏飞<sufei.1013@163.com> 11:24:09
 [洛阳] 季末ˇ  谁有空可以把这块发个帖子诠释一下。
 无法浏览网页(1250623166) 11:28:38
 net:
 理解关键:Object---- 属于 引用类型,
 ValueType继承于object ---- 属于 值类型
 关键看是什么类型的比较。
 
 一:equals 是按照值类型、引用类型 进行比较的。
 1、如果是值类型比较的就是两个比较对象的值。
 2、如果是引用类型比较的就是两个比较对象的引用。
 二:== 同样是按照值类型、引用类型 进行比较的。
 1、如果是值类型比较的就是比较两个对象的值(同equals)
 2、如果是引用类型比较 就要看是否重写了==操作符,如果没有重写就会出现编译错误。
 无法浏览网页(1250623166) 11:28:56
 谁补充些java的情况
 [洛阳] 季末ˇ<gexiaoliang@vip.qq.com> 11:30:27
 @[郑州] 苏飞[img]file:///C:%5CUsers%5CADMINI%7E1%5CAppData%5CLocal%5CTemp%5C6ZD$%HBUZ[H%7E@Y%28R%7B46]9%601.gif[/img]我会说 我把论坛的账号密码忘了 最后在试了四边之后成功登陆了。。。 差一次就被锁了。。。
 无法浏览网页(1250623166) 11:31:14
 一:equals 是按照值类型、引用类型 进行比较的。
 1、如果是值类型比较的就是两个比较对象的值。
 2、如果是引用类型比较的就是两个比较对象的引用。
 二:== 同样是按照值类型、引用类型 进行比较的。
 1、如果是值类型比较的就是比较两个对象的值(同equals)
 2、如果是引用类型比较 就要看是否重写了==操作符,如果没有重写就会出现编译错误。
 
 以上是默认情况。
 如果实现了重写equals或者==操作符。那就是按重写的比较方法进行比较.
 --------------------------------------------------------------------------------------------------------------------
 感谢 无法浏览网页  [洛阳] 季末ˇ<gexiaoliang@vip.qq.com>  瞌睡虫(719367804)   W@lf(326335)
 
 | 
 |