c# – “stringDemo”与新的字符串(“stringDemo”.ToCharArray)
请看下面的代码:
using System; class MyClass { static void Main() { object o = ".NET Framework"; object o1 = new string(".NET Framework".ToCharArray()); Console.WriteLine(o == o1); Console.WriteLine(o.Equals(o1)); } } 其结果是: 现在考虑一下: using System; class MyClass { static void Main() { object o = ".NET Framework"; object o1 = ".NET Framework"; Console.WriteLine(o == o1); Console.WriteLine(o.Equals(o1)); } } 其结果是: 如果对象引用相同,则“==”比较,如果内容相同,则“.Equals()”将进行比较.我想知道这些代码有什么区别? object o1 = new string(".NET Framework".ToCharArray()); 和 object o1 = ".NET Framework"; 他们都是一个对象,但是为什么结果会有所不同呢? 解决方法
在第二种情况下,您正在为o和o1赋值使用相同的字符串常量. C#保证同一程序中的任何两个相等的字符串常量表达式将引用相同的字符串对象.所以o和o1的值是相同的参考. 虽然我找不到更一般的形式(对于常量字符串表达式),您的情况实际上涵盖在C#规范的2.4.4节:
编辑:关于==的行为的快速注释: >如果两个操作数的编译时类型为==,将使用由字符串提供的重载,执行内容比较 在你的情况下,编译时类型的操作数都是对象,所以它真正地使用引用相等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – Sql Server CE – 临时禁用特定列的自动增量
- SQLite3数据库操作语法 (转)
- flex元数据[Bindable]的意义和使用
- 在C#中受保护的访问说明符和受保护的内部有什么区别
- cocos2dx多线程以及线程同步 与 cocos2dx内存管理与多线程问
- c – 编译器不推导出模板参数(map std :: vector – > std
- c# – Peer-to-Peer分散式网络 – 向所有对等体发送消息
- CREATE TABLE、ALTER TABLE、DROP TABLE等,及表内列的添加
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标
- 3.6 Swift 之 Range