- 积分
- 40165
- 好友
- 记录
- 主题
- 帖子
- 听众
- 收听
|
先是从 无法浏览网页(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)
|
|