1.String中的==与Equals方法执行结果一样吗?

我们都知道对于引用类型“==”比较的是引用而不是具体的值,但c#中有一种神奇的叫做操作符重载的东西。官方对String类中的==进行了重载,源码如下:

    /// <summary>
/// 确定两个指定的字符串是否具有相同的值。
/// </summary>
///
/// <returns>
/// 如果 <paramref name="a"/> 的值与 <paramref name="b"/> 的值相同,则为 true;否则为 false。
/// </returns>
/// <param name="a">要比较的第一个字符串,或 null。</param><param name="b">要比较的第二个字符串,或 null。</param><filterpriority></filterpriority>
[__DynamicallyInvokable]
public static bool operator ==(string a, string b)
{
return string.Equals(a, b);
}

是不是不可思议?是的,==操作符内部调用了Equals方法。下面是测试代码

    public static void Main(String[] args)
{
string s1 = new string(new char[] { 'a' });
string s2 = new string(new char[] { 'a' });
Console.WriteLine("s1==s2?"+(s1==s2));
Console.WriteLine("s1.Equals(s2)?"+s1.Equals(s2)); Console.ReadKey();
}

查看s1和s2的内存地址发现是两个不同的引用,但是==的执行结果是true

                            

2.String.Empty和""有区别吗?

Empty为String类的只读常量,但是源码中并没有看到如何赋值。在vs中试了一下发现这两个的值是相等的,并没有看出来有啥区别。

所以说Empty肯定是占用了内存空间的,是引用类型。只能说Empty的写法要好于"",使用后者的话在多行代码中很容易由于其中多了一个空格而产生不可预知的错误。如:" ",查起来会比较麻烦。

代码如下:

    public static void Main(String[] args)
{
string s3 = string.Empty;
string s4 = "";
Console.WriteLine(s3==s4);
Console.ReadKey();
}

     

顺便说一下,由于字符串的不可变性。上面s3和s4的引用地址是同一个~

String中的==与Empty的更多相关文章

  1. php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断

    php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断 实际需求:把sphinx返回的结果放到ssdb缓存里,要考虑到sph ...

  2. Java的String中的subString()方法

    方法如下: public String substring(int beginIndex, int endIndex) 第一个int为开始的索引,对应String数字中的开始位置, 第二个是截止的索引 ...

  3. Here String 中不该进行分词

    我们知道,在 Shell 中,一个变量在被展开后,如果它没有被双引号包围起来,那么它展开后的值还会进行一次分词(word splitting,或者叫拆词,分词这个术语已经被搜索引擎相关技术占用了)操作 ...

  4. C++string中有关字符串内容修改和替换的函数浅析

    1.assign() 原型: //string (1) basic_string& assign (const basic_string& str); //substring (2) ...

  5. 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接

    长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...

  6. Java-J2SE学习笔记-查找一个String中,subString的出现次数

    1.查找一个String中,subString的出现次数 2.代码 package Test; public class TestStringContain { public static void ...

  7. string中常用的函数

    string中常用的函数 发现在string在处理这符串是很好用,就找了一篇文章放在这里了.. 用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重1.De ...

  8. Check if a string is NULL or EMPTY using PowerShell

    http://techibee.com/powershell/check-if-a-string-is-null-or-empty-using-powershell/1889 Check if a s ...

  9. String 中的秘密

    Navigation:  数据类型相关 > Delphi 的字符及字符串 > [3] - String 中的秘密   //String 的指针地址及实际的内存地址 var str: str ...

随机推荐

  1. Hexo+NextT第三方服务调用【4】

    该系列博客列表请访问:http://www.cnblogs.com/penglei-it/category/934299.html 摘要        静态站点与动态站点有很大的不一样,它拥有一定的局 ...

  2. C#的FTP上传下载的实验

    前段时间做了一个FTP操作服务器文件的实验,现在把一些经验写下来,免得忘记. 1.上传的处理:目标文件夹A上传到服务器指定目录.先检索服务器目录中有无同名文件夹,若有,则先改名,上传成功后再删除,上传 ...

  3. 微信内嵌H5网页 解决js倒计时失效

    项目要求:将H5商城页面嵌套到公司微信公众号里 项目本身的开发跟移动端网页并无太多差异,只是这昨天遇到一个问题,说是棘手,到也简单. 用户下单后,在选择支付方式页面,有个倒计时的逻辑(从下单时开始计算 ...

  4. 在React+Babel+Webpack环境中使用ESLint

    ESLint是js中目前比较流行的插件化的静态代码检测工具.通过使用它可以保证高质量的代码,尽量减少和提早发现一些错误.使用eslint可以在工程中保证一致的代码风格,特别是当工程变得越来越大.越来越 ...

  5. C++继承、多态、虚函数

    #答案:http://www.cnblogs.com/tinaluo/articles/6290994.html 1 编写程序:定义一个抽象基类sharpe,只有包含一个求面积的纯虚函数,派生出矩形类 ...

  6. Redmine管理项目1-自定义属性

    先是点击页面导航条(最上面那排菜单,有主页.我的工作台.项目.管理.帮助等)上的“管理”菜单,看到下图: 看到里面的“自定义属性”菜单了吧,点击它,可以看到下面的界面: 点击那个“新建自定义属性”菜单 ...

  7. D3.js:Update、Enter、Exit

    Update.Enter.Exit 是 D3 中三个非常重要的概念,它处理的是当选择集和数据的数量关系不确定的情况. 如果数组为 [3, 6, 9, 12, 15],将此数组绑定到三个 p 元素的选择 ...

  8. Long类型比较大小,long型和Long型区别

    今天写代码发现发现本地程序是正常的,但是发送到测试环境就不正常了,本着对数据的怀疑态度链接了测试数据库,调试程序发现,确实是数据问题,然后数据出现在什么地方呢?才发现是在判断用户所属的teamGrou ...

  9. ecstore在MySQL5.7下维护报错WARNING:512 @ ALTER IGNORE TABLE

    ecstore在MySQL5.7下维护报错WARNING:512 @ ALTER IGNORE TABLE 打开 /app/base/lib/application/dbtable.php , 替换A ...

  10. MyBatis 3 与 Spring 4 整合关键

    MyBatis 3 与 Spring 4 整合关键 MyBatis与Spring整合,首先需要一个Spring数据源.其次有两个关键,配置sqlSessionFactory时需要配置扫描sql映射xm ...