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. ios的自动转屏

    在IOS6以前,设置转屏需要用到方法 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)x 在6以后,取代它 ...

  2. C语言总结2

    12).预处理指令 1. 什么叫做预处理代码. 以#开头的代码就是预处理代码  #warning #import 2. 手写1个C程序的步骤.(面试题) 1>编写代码 2>编译 1)执行. ...

  3. Day1-python理论基础

     一.python介绍 Python 的创始人为Guido van Rossum.Guido为了打发圣诞节的无趣,于1989年发明,在荷兰国家数学和计算机科学研究所设计出来的(作为ABC 语言的一种继 ...

  4. Oracle DML容错处理(1)

    Oracle dml操作过程中可能出现键重复或者数据类型不一致等问题,一般进行数据处理时候需要对这些可能出现的错误提前考虑,避免更新失败.Oralce给出了一些其他解决方案,以在不同场景下使用. 1. ...

  5. Writing clean code is what you must do in order to call yourself a professional.

    Clean Code  A Handbook of Agile Software Craftsmanship

  6. servlet笔记

    开发servlet有三种方法: (1)    实现 Servlet接口 (2)    通过继承 GenericServlet (3)    通过继承 HttpServlet get提交和post提交的 ...

  7. SDN理解:云数据中心底层网络架构

    目录 - 目录 - 云数据中心流量类型 - NSX整体网络结构 - 管理网络(API网络) - 租户网络 - 外联网络 - 存储网络 - openstack整体网络结构 - 管理网络:(上图中蓝线) ...

  8. 文档在线预览开源实现方案三:OpenOffice + PDFRenderer + js

    之前的方案无法很好地解决异构平台及不同浏览器的兼容性问题,如方案一需要客户端浏览器支持flash而移动端浏览器无法支持这点,虽然移动端浏览器支持方案二,但是一些老版本的IE浏览器无法支持,例如IE8就 ...

  9. ECMAScript6之Set结构和Map结构

    set数据结构 ES6提供了一个新的数据结构,Set,Set和Array数组相似,但是Set里没有重复的数据,可以说是一个值的集合. 同时,Set数据结构有以下属性和方法: size:返回成员总数 a ...

  10. WeakSelf宏的进化(转载)

    我们都知道在防止如block的循环引用时,会使用__weak关键字做如下定义: __weak typeof(self) weakSelf = self; 后来,为了方便,不用每次都要写这样一句固定代码 ...