关于object 与 string 比较

oujiachao123 2012-11-13 09:19:03
object TT = 2;
if (TT == "2") 怎么object能与字符串比较,如果换成TT == 2就不行,虽然平时知道可以这样用,是什么原因?装箱撤箱了吗?
...全文
391 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujie596359269 2012-11-15
  • 打赏
  • 举报
回复
楼主是说为啥子用string行。用int就不行 10楼的。可能是对的
心梦缘-雪雁 2012-11-15
  • 打赏
  • 举报
回复
可以直接转型
gudujianxiao 2012-11-15
  • 打赏
  • 举报
回复
引用 20 楼 sinodzh 的回复:
object TT = 2; if (TT == "2") 第一句是装箱了。 值类型装箱的时候会申请在托管堆的一个引用和复制。即值类型在栈里面也在托管堆里面。 第二句 楼上说了。相当于tt.tostring() =="2" 没有拆箱 装箱对性能的影响远远大于拆箱。
if(TT=="2")这个不能相当于tt.Tostring()=="2" 如果是相当于,那么If(TT=="2")应该为True,结果我们发现它为false. 我个人认为 TT本质是int类型,只是通过装箱将整型托管到堆上。原则上没有改变其类型。 其次我们在使用if(TT=="2")时,编程会提示一个警告信息:Possible unitended reference comparison;to get a value comparsion, cast the left hand side to type 'string'. 也就是说确定不了TT到底转换成什么类型的值,因为Object是所有类的基类。故返回的结果为false.
sinodzh 2012-11-15
  • 打赏
  • 举报
回复
引用 20 楼 sinodzh 的回复:
object TT = 2; if (TT == "2") 第一句是装箱了。 值类型装箱的时候会申请在托管堆的一个引用和复制。即值类型在栈里面也在托管堆里面。 第二句 楼上说了。相当于tt.tostring() =="2" 没有拆箱 装箱对性能的影响远远大于拆箱。
第2句我说错了。刚试了的。他会先做类型判断。
sinodzh 2012-11-15
  • 打赏
  • 举报
回复
object TT = 2; if (TT == "2") 第一句是装箱了。 值类型装箱的时候会申请在托管堆的一个引用和复制。即值类型在栈里面也在托管堆里面。 第二句 楼上说了。相当于tt.tostring() =="2" 没有拆箱 装箱对性能的影响远远大于拆箱。
threenewbee 2012-11-14
  • 打赏
  • 举报
回复
引用 5 楼 Kz_Mm 的回复:
引用 3 楼 caozhy 的回复:对于字符使用==运算符会自动调用object的ToString()方法。 对 object是泛型,在用object型与string类型比较的时候系统会自动调用ToString()方法的 而且你上面写的TT不是string类型,当然不能用TT == “2” 这样了
object怎么是泛型呢???
zhang88584322 2012-11-14
  • 打赏
  • 举报
回复
版主正解。。。。
着魔 2012-11-14
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
对于字符使用==运算符会自动调用object的ToString()方法。
对 object是泛型,在用object型与string类型比较的时候系统会自动调用ToString()方法的 而且你上面写的TT不是string类型,当然不能用TT == “2” 这样了
zyug 2012-11-14
  • 打赏
  • 举报
回复
引用 2 楼 fangxuan 的回复:
用Equals吧,if(TT.Equals("2")){}
诺维斯基 2012-11-14
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
引用 16 楼 caozhy 的回复:
引用 15 楼 silverradiance 的回复:引用 3 楼 caozhy 的回复:对于字符使用==运算符会自动调用object的ToString()方法。 Bitmap bitmap = new Bitmap(100, 100); if (bitmap == "ss") { } 像这样就不行了,看了看Bitm……
还是没搞懂怎么搞得,不过这个真心用不到。
threenewbee 2012-11-14
  • 打赏
  • 举报
回复
引用 15 楼 silverradiance 的回复:
引用 3 楼 caozhy 的回复:对于字符使用==运算符会自动调用object的ToString()方法。 Bitmap bitmap = new Bitmap(100, 100); if (bitmap == "ss") { } 像这样就不行了,看了看Bitmap 也并没有什么重载,曹老大研究过这个问题吗》 ……
失言了。
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
对于字符使用==运算符会自动调用object的ToString()方法。
Bitmap bitmap = new Bitmap(100, 100); if (bitmap == "ss") { } 像这样就不行了,看了看Bitmap 也并没有什么重载,曹老大研究过这个问题吗》
BrucesLong 2012-11-14
  • 打赏
  • 举报
回复
引用 11 楼 oujiachao123 的回复:
引用 楼主 oujiachao123 的回复: object TT = 2; if (TT == "2") 怎么object能与字符串比较,如果换成TT == 2就不行,虽然平时知道可以这样用,是什么原因?装箱撤箱了吗?我不太喜欢用tostring,很容易遇到null
额,个人意见,觉得tostring不是喜欢不喜欢用的问题,而是需不需要用的问题;
threenewbee 2012-11-14
  • 打赏
  • 举报
回复
看错了 object TT = "2"; 这样才行。 不同类型肯定是false嘛。
oujiachao123 2012-11-14
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
对于字符使用==运算符会自动调用object的ToString()方法。
自动调用tostring,那怎么还为false呢 if (TT == "2")
oujiachao123 2012-11-14
  • 打赏
  • 举报
回复
引用 楼主 oujiachao123 的回复:
object TT = 2; if (TT == "2") 怎么object能与字符串比较,如果换成TT == 2就不行,虽然平时知道可以这样用,是什么原因?装箱撤箱了吗?
我不太喜欢用tostring,很容易遇到null
  • 打赏
  • 举报
回复
object 可以直接转换成string 不能直接转换成int
CSMSDN 2012-11-14
  • 打赏
  • 举报
回复
1楼正,Obect你己经把它装箱了,这个相当于基类,任何类型都可以转Obect类型,所以,无法与string对象,因为不知道OBECT类型之前是什么类型,C#是强语言,所以,你得先转成STRING类型,再进行对比
色拉油 2012-11-14
  • 打赏
  • 举报
回复
==自动调用 ToString方法了
加载更多回复(3)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧