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>3</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的引用地址是同一个~

转载于:https://www.cnblogs.com/xxyxpy/p/6288706.html

String中的==与Empty相关推荐

  1. 深入解析String中的intern

    转载自 深入解析String中的intern 引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String.这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念.常 ...

  2. String中intern()方法

    本文参考 https://blog.csdn.net/believesoul/article/details/79588305 ,我对这篇文章进行了一些小小的整理和修改.这篇文章很好的对intern( ...

  3. 对String中intern()方法的认识

    最近在看字符串相关知识的时候,又看到了关于字符串创建方式和是否相等的相关问题,回忆起之前碰到的一个String中的intern()方法,它是一个本地方法(由Java语言外的语言编写),因此在jdk1. ...

  4. string中的Copy-on-Write技术

        在谈这项技术之前,我们先来了解一下string类内存分配.string类有一个私有成员,其类型是一个char*,记录用户从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存.因为是从堆上 ...

  5. C++从string中删除所有的某个特定字符

    C++中要从string中删除所有某个特定字符, 可用如下代码 str.erase(std::remove(str.begin(), str.end(), 'a'), str.end()); 其中,  ...

  6. 为什么String中的Java hashCode()使用31作为乘数?

    本文翻译自:Why does Java's hashCode() in String use 31 as a multiplier? Per the Java documentation, the h ...

  7. C++ string中find ,rfind 等函数 用法总结及示例

    string中 find()的应用  (rfind() 类似,只是从反向查找) 原型如下: (1)size_t find (const string& str, size_t pos = 0) ...

  8. String中的“equal方法”和“==”

    二话不说,先来说下重写的事情: 在Java中,String .Math.还有Integer.Double....等这些封装类重写了Object中的equals()方法,让它不再比较其对象在内存中的地址 ...

  9. 从String中移除空白字符的多种方式!?差别竟然这么大!

    字符串,是Java中最常用的一个数据类型了.我们在日常开发时候会经常使用字符串做很多的操作.比如字符串的拼接.截断.替换等. 这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中 ...

最新文章

  1. 127.0.0.1和0.0.0.0地址的区别
  2. 宏基因组-微生物组文章目录索引(180401)
  3. 学习笔记(03):Python实战编程-sys模块
  4. python画三维立体图难吗_万万没想到,Python竟能绘制出如此酷炫的三维图
  5. 蚂蚁庄园 php源码,蚂蚁庄园五体投地
  6. Android 系统(170)----收到短信,FM外放自动切回耳机
  7. SQL语句备查(引用)
  8. linux php 语法加亮,用js函数PHP语法加亮
  9. Anaconda Python安装,Spyder汉化及调试
  10. 阿里java代码规范插件
  11. 在.net中使用sqlite
  12. 数值分析原理课程实验——牛顿(Newton)迭代法
  13. 微商如何利用微信公众号来盈利
  14. 新松机器人招股说明书_来看看绿的谐波招股书披露的重要信息
  15. Python实战之tkinter库画图,用canver画布教你画会动的哆啦A梦
  16. 启舰:不懂花钱的人,大概率成为Loser!
  17. 黄芽菜和大白菜的区别 黄芽菜的做法
  18. Eclipse 介绍-配置-使用
  19. 用php编写多项选择题_php试题
  20. 正则表达式 ^$ 同时出现代表什么

热门文章

  1. Windows网络服务---DHCP服务
  2. OpenSSH 服务器的 20 个最佳实践
  3. 不使用资源文件动态创建对话框的做法
  4. javascript的拖放(第1部分)
  5. 保障健康睡眠的几种食疗法
  6. 使用tcgetattr函数与tcsetattr函数控制终端-转
  7. [Java] 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级
  8. 蓝桥杯 ALGO-63 算法训练 乘法表
  9. 1016. 部分A+B (15)-PAT乙级真题
  10. #论char数组结尾’\0’的必要性#