社区
C#
帖子详情
请问,a = b,b = c,是否 a = c
RT3254
2011-10-26 05:28:35
相等性传递,如果成立
那:
那如果用IEqualityComparer(Of T)接口,自定义一个相等比较器,一个数和比它大2的数相等,比如3和5相等,5和7相等,那根据传递性,3和7是不是相等呢,可是,这又不满足自定义的相等器规则啊
...全文
879
63
打赏
收藏
请问,a = b,b = c,是否 a = c
相等性传递,如果成立 那: 那如果用IEqualityComparer(Of T)接口,自定义一个相等比较器,一个数和比它大2的数相等,比如3和5相等,5和7相等,那根据传递性,3和7是不是相等呢,可是,这又不满足自定义的相等器规则啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
63 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
言多必失
2011-10-27
打赏
举报
回复
引用:
感想:
1.
不管哪一种,3个月不用,就跟不会差不多了。
2.
逼急了要用,一个礼拜就能学会。
3.
没事休闲时间别老学语言,学学做人处事,再不然去游泳,打球,钓鱼都比学语言好。
fsdvf34
2011-10-27
打赏
举报
回复
[Quote=引用 45 楼 ailin84 的回复:]
我感觉你误解了,如果你实现了 3==5 ,5==7 那么 3==7 根据规则就是成立的.
你没有重写GetHashCode,就是获取这个对象的唯一标示,当你重写Equals时,如果不重写GetHashCode,生成时就会有警告,如果两个类型相同的对象表示相同的值,则哈希函数必须为两个对象返回相同的常数值
你的规则 3.GetHashCode()== 5.GetHashCode()
……
[/Quote]
可是 3 == 7 ,又不满足我的Equals方法的逻辑
ailin84
2011-10-27
打赏
举报
回复
我感觉你误解了,如果你实现了 3==5 ,5==7 那么 3==7 根据规则就是成立的.
你没有重写GetHashCode,就是获取这个对象的唯一标示,当你重写Equals时,如果不重写GetHashCode,生成时就会有警告,如果两个类型相同的对象表示相同的值,则哈希函数必须为两个对象返回相同的常数值
你的规则 3.GetHashCode()== 5.GetHashCode()
5.GetHashCode()=7.GetHashCode();
所以 3==7
雨者少年
2011-10-27
打赏
举报
回复
在程序设计中,肯定是不等的!但如果换个顺序,即 b=c,a=b ,那么a==c
雨者少年
2011-10-27
打赏
举报
回复
在程序设计中,肯定是不等的!但如果换个顺序,即 b=c,a=b ,那么a=c
MWJPM
2011-10-27
打赏
举报
回复
楼主的问题让我想起了学过的近世代数的群,环,域...,那是最纠结的时候
vector0429
2011-10-27
打赏
举报
回复
根据你的定义他应该是相等的呗
嘶吼的蚂蚁
2011-10-27
打赏
举报
回复
一个赋值操作引发的大争论!~
Daqing
2011-10-27
打赏
举报
回复
不等,因为你这个是赋值的话a和c没一点关系。
zhujiazhi
2011-10-27
打赏
举报
回复
http://www.cnblogs.com/xinglongbing/archive/2011/03/21/1990720.html
RT3254
2011-10-27
打赏
举报
回复
[Quote=引用 30 楼 rt3254 的回复:]
需要对称性么?
那这样:
用IEqualityComparer(Of T)接口,自定义一个相等比较器,一个数和比它大2的数、或比它小2的数相等,比如3和5相等,5和3也相等;5和7相等,7和5也相等,那根据传递性,3和7是不是相等呢,如果相等,又与本自定义比较规则不相符
楼上多为朋友谈到对称性,我现在就给一个对称性,
请解释...........
[/Quote]
请指教..
gama456
2011-10-27
打赏
举报
回复
我觉得吧 是= 还是== 是=就不成立
int64
2011-10-27
打赏
举报
回复
真是乱啊
小火龙果
2011-10-27
打赏
举报
回复
"="和"==" 在代码中含义是不同的
ruanwei1987
2011-10-27
打赏
举报
回复
mark 太乱了
raymond123456
2011-10-27
打赏
举报
回复
[Quote=引用 11 楼 skyparty 的回复:]
写程序是自己创造简单的世界,如果不需要和其他世界有接口,那不妨可以改变自己世界中的数学及语……
[/Quote]
赞一个。
Tim_Andy
2011-10-27
打赏
举报
回复
整型不成立
RT3254
2011-10-27
打赏
举报
回复
需要对称性么?
那这样:
用IEqualityComparer(Of T)接口,自定义一个相等比较器,一个数和比它大2的数、或比它小2的数相等,比如3和5相等,5和3也相等;5和7相等,7和5也相等,那根据传递性,3和7是不是相等呢,如果相等,又与本自定义比较规则不相符
楼上多为朋友谈到对称性,我现在就给一个对称性,
请解释...........
youzelin
2011-10-27
打赏
举报
回复
如果按照一定的规则,得出 a = b,b = c,那么 a === c
这是规则所决定的,如果要像#2所说的那样:
人=吃饭+睡觉+上班+玩
猪=吃饭+睡觉
那么,人一定=猪+上班+玩,因为规则定死了。而事实上,按照常理来说,之前的人和猪的 rules 是错的。但是既然这么定了,那一定满足等价代换的替换法则。
所以,规则一定,如何 a = b,b = c,那么 a 必定等于 c
这没有什么好纠结的。楼主在这上面花时间确实是浪费了。
不管怎样,把贴结了吧。
没有必要在追加更多的回复。
RT3254
2011-10-27
打赏
举报
回复
[Quote=引用 52 楼 xn314318 的回复:]
引用 6 楼 caozhy 的回复:
而且你让3 = 5,不但违反传递性,而且也违反对称性
3 = 5 -> 5 = 3?
3=5 ???????? 5=?3吗?
3等于5了 那么5等于 3吗
[/Quote]
请看30楼
加载更多回复(41)
String a="hello" String b="hello" a==b 返回true的问题分析
String a="hello world"; //在java中有一个常量池,当创建String 类型的引用变量给它赋值时,java会到它的常量池中找"hello world"是不是在常量池中已存在。如果已经存在则返回这个常量池中的"hello world"的地址(在java中叫引用)给变量a 。注意a并不是一个对象,而是一个引用类型的变量。它里面存的实际上是一个地址值,而这个值是指向一个字符串对象的。在程序中凡是以"hello world"这种常量似的形式给出的都被放在常量池中。 String b=new String("hello world"); //这种用new关键字定义的字符串,是在堆中分配空间的。而分配空间就是由new去完成的,由new去决定分配多大空间,并对空间初始化为字符串"hello world" 返回其在堆上的地址。 通过上面的原理,可以做如下实验: String a="hello world"; String b="hello world"; String c=new String("hello world"); String d=new String("hello world"); if(a==b) System.out.println("a==b"); else System.out.println("a!=b"); if(c==d) System.out.println("c==d"); else System.out.println("c!=d"); //输出结果: a==b c!=d 为什么会出现上面的情况呢? String a="hello world"; String b="hello world"; 通过上面的讲解可以知道,a和b都是指向常量池的同一个常量字符串"hello world"的,因此它们返回的地址是相同的。a和b都是引用类型,相当于c语言里面的指针。java里面没有指针的概念,但是实际上引用变量里面放的确实是地址值,只是java为了安全不允许我们对想c语言中的那样对指针进行操作(如++ 、--)等。这样就有效的防止了指针在内存中的游离。 而对于 String c=new String("hello world"); String d=new String("hello world"); 来说是不相等的,他们是有new在堆中开辟了两块内存空间,返回的地址当然是不相等的了。如果我们要比较这两个字符串的内容怎么办呢?可以用下面的语句: if(c.equals(d)) System.out.println("c==d"); else System.out.println("c!=d"); //输出 c==d
汇编语言和c语言矩阵A*B+C*D的运算
实验要求: 1、要求有汇编语言和c语言两种算法编写,完成矩阵A*B+C*D的运算 2、要求有子程序的调用
C语言程序改错题[参考].pdf
C语言程序改错题[参考].pdf
蓝桥杯大赛选拔赛试题真题解析,供大家学习研究参考
第2题 已定义:int a = 02023, b = 0x212; a + b 的值是( )。 A. 八进制数4771 B. 十进制数1573 C. 十进制数2553 D. 十六进制数9f9 答案:B 解析:首先a转二进制为:0100 0001 0011 b转二进制为:0010 0001 0010 求和:1100 0100 0101 转八进制:6105 转十六进制:C45转十进制:1573
C语言四则运算
C语言四则运算简单程序if(a==0||c==0) { printf("输入错误,分母不为0!"); } if(op=='+'){y=b*c+d*a;x=a*c;} //四则运算 if(op=='-'){y=b*c-d*a,x=a*c;} if(op=='*'){y=b*d;x=a*c;} if(op=='/'){y=b/c;x=a/d;} z=x; if(x>y) z=y; i=z;
C#
111,130
社区成员
642,542
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章