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. java对数据库的操作

    package com.DateSystem; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLEx ...

  2. 浅谈java垃圾回收机制

    今天看thinking in java,里面很详细的谈到java垃圾回收器机制,看完后让我对这神秘的区域有一定的了解,特写一些小总结记录下来. 分两点来说. 第一点:Object.finalize() ...

  3. 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖

    摇一摇JS脚本逻辑:接下来是移动端JS脚本逻辑的实现,摇一摇的实现需借助html5新增的devicemotion事件,获取设备在位置和方向上的改变速度的相关信息,该事件的基本使用如下: if (win ...

  4. docker--------------实践(转载)

    在私有云的容器化过程中,我们并不是白手起家开始的.而是接入了公司已经运行了多年的多个系统,包括自动编译打包,自动部署,日志监控,服务治理等等系统.在容器化之前,基础设施主要以物理机和虚拟机为主.因此, ...

  5. hdu1045

    #include<iostream> using namespace std; int count = 0, n = 0; //判断该ch[x][y]是否可以放置 bool isOk(ch ...

  6. windows下配置Java环境变量

    一.首先, JDK的安装路径,在这里我们选择默认安装在C:\Program Files\Java\jdk1.7.0_45\目录下. 二.下面, 设置环境变量: [1]“我的电脑”右键菜单---> ...

  7. python爬虫框架scrapy初识(一)

    Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.所谓网络爬虫,就是一个在网上到处或定向抓取数据的 ...

  8. neovim的新体验

    A. 缘由  vim下的CtrlP插件好用,但是当文件较多时,不能很快检索,时有卡死的情况发生.听说neovim引入了很多新的功能,例如异步处理,job管理等. B. 安装neovim1. Ubunt ...

  9. IMacro 脚本简记

    抓取速卖通纠纷订单详情,生成csv进行统计. var macro1="CODE:";macro1+="VERSION BUILD=8970419 RECORDER=FX& ...

  10. socket编程之TCP/UDP

    目标: 1.编写TCP服务端客户端,实现客户端发送数据,服务端接收打印 2.采用OOP方式编写TCP服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端 3.采用OOP方式编写UDP服务端 ...